MMORPG网络游戏开发之网络通信
MMO游戏又称大型多人在线角色扮演类游戏,在所有的角色扮演的游戏当中,玩家都要扮演一个虚拟角色,并控制角色活动
MMO可以分为客户端和服务器两部分,玩家通过客户端连接到互联网登录服务器才能进行游戏,游戏玩家的数据资料保存在服务器上,游戏的开发商和运营商提供游戏的服务器以及管理虚拟世界,对游戏不断的做出更新以便留住老玩家以及吸引新玩家
今天就为大家介绍使用Unity3D引擎制作一款MMORPG游戏需要掌握的核心技术:网络通信技术
建立解决方案(目录规划)
- 首先我们在VisualStudio里点击新建项目,虽然都是新建项目,但这里需要特别注意一下,因为服务器一般不会带有用户界面,所以我们建立的项目应该是一个控制台项目
- VisualStudio有很多种控制台,比如基于.NET Framework或.NET Code的,本文使用的控制台为下图中被标记的控制台
为什么选择这个控制台呢?
- 因为上图中的第二个控制台只能运行在Windows平台上,而第一个基于.NET Code的控制台可以跨平台运行,开发的游戏服务器有很大的概率是运行在Linux服务器上面的,虽然我们开发会用Windows,但部署的时候一般都是部署在Linux服务器上
选好控制台后点击下一步,然后为项目配置项目名和储存位置,因为我们的项目是由很多个小项目构成的,所以我会把这些小项目都放在同一个文件夹下面(也就是下图位置选项中的study文件夹)
因为我们先建立的是服务器项目,所以项目名叫做MmoServer,配置完成后点击下一步,其他信息中的目标框架选择默认就好,然后点击创建
创建好服务器项目后,我们还需要再创建一个项目,因为网络游戏除了有客户端和服务器代码外,还会存在一些客户端跟服务器共通的项目代码,所以我们一般会建立一个通用文件夹,用来存放一些既要在服务器上使用的代码,又需要在客户端上使用的代码
因为这个通用文件夹是被客户端和服务器所调用的,所以它的的项目类型就不能再是控制台项目了,而是必须要把它建立成类库,类库可以被客户端和服务器所引用
配置储存位置与名称
下面再用与建立服务器项目一样的方法建立客户端项目,只是将项目名称改为ConClient
- 创建完客户端项目后,第一步的目录规划就完成了,接下来我们就来实现网络通信
实现网络通信
- 网络游戏想要实现网络通信都是需要使用一种网络协议的,目前主流的互联网网络协议是TCP/IP协议,但本文不会直接使用TCP/IP通信,因为它涉及的内容较多,难度也较高,我们会使用WS协议
- WS是什么呢?
- WS是一个应用层协议,这个协议比HTTP、FTTP这些协议的适用性都要广泛,因为它实际上就相当于是一个已经帮你实现好的高层网络协议,而且效率很高,它的全称叫做WebSocket
- WebSocket协议跟HTTP这样的传统的协议有什么不一样呢?
- HTTP主要服务于网页的传输,而WS的应用范围比较广,除了能用在Web上面,也非常适用于一般的网络游戏开发
- 接下来我们需要为项目引入WebSocket库,刚才创建的三个项目里都要引入,这里我用为Common引入WebSocket库为例子,来为大家演示引入过程:在Common项目的依赖项上右键,点击管理NuGet程序包
- 在弹出界面中搜索WebSocketSharp,然后选择搜索结果中的第一个进行安装,这样就成功引入WebSocket通信库了
- 为三个项目引入WebSocket库后就可以开始撸代码了,下面是服务器项目的代码
using System;
using WebSocketSharp.Server;
using WebSocketSharp;
namespace MmoServer
{
class Program
{
// 这个是我创建的用户相关的服务
public class UserService : WebSocketBehavior
{
// 提供服务
protected override void OnMessage(MessageEventArgs e)
{
this.Send($"From server: {e.Data}"); // 收到消息时向客户端发送消息
}
}
static void Main(string[] args)
{
WebSocketServer svr = new WebSocketServer("ws://localhost:8888"); // 建立一个服务器,并让它监听8888端口
svr.AddWebSocketService<UserService>("/UserService"); // 为服务器增加一个用户服务
svr.Start(); // 启动服务器
Console.WriteLine("Server started..."); // 在控制台输出Server started...
Console.ReadLine(); // 等待用户敲回车
svr.Stop(); // 停止服务器
Console.WriteLine("Server stopped"); // 在控制台输出Server stopped...
}
}
}
- 服务器代码已经写好了,接下来我们就把客户端连接到服务器上去,下面是客户端代码
using System;
using WebSocketSharp;
namespace ConClient
{
class Program
{
static void Main(string args)
{
// 微软有一个原生的WebSocket,注意不要用到那个WebSocket了
WebSocket ws = new WebSocket("ws://localhost:8888/UserService"); // 访问服务器的用户服务界面
ws.OnMessage += Ws_OnMessage; // 将Ws_OnMessage添加到OnMessage事件中,收到消息时会调用OnMessage里的方法
ws.Connect(); // 与服务器建立链接
ws.Send("Hello, server!"); // 向服务器的用户访问界面发送Hello, server!
Console.ReadLine(); // 等待服务器返回响应
ws.Close(); // 关闭WebSocket链接
Console.WriteLine("Hello World");
}
private static void Ws_OnMessage(object sender, MessageEventArgs e)
{
Console.WriteLine(e.Data); // 打印服务器传来的消息
}
}
}
- 写完这些代码后再运行服务器就能实现网络通信了,运行效果如下
- 网络通信的实现到这里就结束了,感谢各位读者能够看到这里,如果想要学习更多MMORPG网络游戏知识可以参加我们的《从零开发MMO 3天训练营【第一期】 》训练营
课程大纲如下
学完你能够收获
连续3天,360+分钟
不仅仅能让你从零开发MMORPG,更能让你了解游戏行业求职所面临最重要的问题!
让你在入行前避过这些坑
本文含有隐藏内容,请 开通VIP 后查看