MMORPG网络游戏开发之网络通信

发布于:2023-01-04 ⋅ 阅读:(201) ⋅ 点赞:(0)

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 后查看