![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Moba游戏开发(类似英雄联盟)
谢白羽
无论东西
展开
-
Moba项目开发(一)打造网络通信系统-任务18:18.完成服务器发送、处理消息的业务逻辑
文章目录1.服务器发送的接口public void Send(BufferEntity package)2.服务器处理消息的接口internal void Handle(BufferEntity buffer)1)判断数据报文的类型2)ack:如果收到确认,就从发送缓冲区去除已经发送且收到确认的报文,如果没办法移除的原因,就是已经移除过了3)业务报文:先传ack,再调用业务逻辑的接口HandleLogicincPackage()3.具体处理业务逻辑的接口private voi原创 2021-07-13 00:44:00 · 193 阅读 · 0 评论 -
Moba项目开发(一)打造网络通信系统-任务17:17.封装日志接口与完善释放客户端的代码
文章目录1.日志类2.给发送信息和接受信息增加打印日志接口3.代码描述:增加对日志接口的封装1.日志类public class Debugpublic static void Log(string log)2.给发送信息和接受信息增加打印日志接口Debug.Log($“发送异常:{e.Message}”);3.代码日志public class Debug{ public static void Log(string log) { //改变控制台字体颜色转载 2021-05-28 17:04:44 · 108 阅读 · 0 评论 -
Moba项目开发(一)打造网络通信系统-任务16:16.对接收到的消息做第一层处理
文章目录1.初始化的接口2.发送消息的接口3.发送ACK消息的接口4.接受消息的接口5.处理消息的接口6.关闭Socket的接口7.创建客户端报文数据建立虚拟连接的接口8.移除客户端的接口9.查询客户端的接口10.代码:完善处理消息的接口后,完整体如下:1.初始化的接口public USocket(Action dispatchNetEvent)2.发送消息的接口public async void Send(byte[] data,IPEndPoint endPoint)3.发送ACK消息的接口原创 2021-05-26 20:50:32 · 125 阅读 · 0 评论 -
Moba项目开发(一)打造网络通信系统-任务15:15.封装服务器的socket接口
文章目录1.状态:未完成2.代码using System;using System.Collections.Concurrent; //线程安全的队列using System.Collections.Generic;using System.Net; //导入命名空间using System.Net.Sockets;using System.Text;namespace MobaServer.Net{ class USocket.原创 2021-05-26 16:24:37 · 118 阅读 · 0 评论 -
打造网络通信系统14.服务器开发环境的配置
文章目录1.安装.net 3.1ASP.NET Core Runtime 3.1.1是做网页的Destop Runtime 3.1.1 做桌面程序的我们选择.NET Core Runtime 3.1.1安装这两个先安装runtime,后安装sdk2.转移cs和Google.protobuf文件夹,3.创建在Net文件下的各类cs文件初始化...原创 2021-05-26 15:15:53 · 134 阅读 · 0 评论 -
Moba项目开发(一)打造网络通信系统-任务13:13.编写buffer工厂创建报文以及发送报文
文章目录1.编写buffer工厂创建2.编写proto测试用类1.编写buffer工厂创建using System.Collections;using System.Collections.Generic;using UnityEngine;using Google.protobuf;namespace Game.Net{ public class BufferFactory { enum MessageType { A原创 2021-05-26 13:23:49 · 210 阅读 · 0 评论 -
Moba项目开发(一)打造网络通信系统-任务12:12.Protobuf的使用
文章目录1.一个message会转化成c#里面的的一个类2.syntax = "proto3" //表示使用版本是protobuf第三个版本3.package对应c#里面的命名空间4.import 引入某个类,如import "RootPB.proto"引入这个文件5.S2C就是服务器,server to client6.C2S就是客户端发送给服务器7.UserInfo (实体数据都在-rootpb.proto文件里面定义)8,将该目录下的proto文件转化为c#脚本,创建proto文件9.序列化和反序列.原创 2021-05-25 23:55:07 · 330 阅读 · 2 评论 -
Moba项目开发(一)打造网络通信系统-任务11:11.保证报文完整性的处理
文章目录1.在BufferEntity解码的时候,先判断包体的大小:2.将发送ACK报文的业务数据包大小置为03.处理业务逻辑时,先判断包体大小是否是完整的1.在BufferEntity解码的时候,先判断包体的大小:1)若大于4则继续往下走,否则都是直接返回,2)再判断除了包体大小,数据包是否还有32个字节,若有,表示包体是完整的 //先判断包体的大小 if (buffer.Length>=4) {原创 2021-05-25 17:00:21 · 145 阅读 · 0 评论 -
Moba项目开发(一)打造网络通信系统-任务10:10.接收到的报文的处理逻辑
文章目录1.处理报文的逻辑()2.在USocket里面增加一个接口,在Updata里面进行调用,服务器可以开线程循环调用3.业务逻辑处理函数4.代码1.处理报文的逻辑()原理:按照报文的序号,进行顺序处理,如果是收到超过当前顺序加1的报文,先进行缓存,等待下一个报文处理后再处理后面的报文public void Handle(BufferEntity buffer)2.在USocket里面增加一个接口,在Updata里面进行调用,服务器可以开线程循环调用原理:从消息队列的字典中取消息,将其反序列化,原创 2021-05-25 16:37:33 · 149 阅读 · 0 评论 -
Moba项目开发(一)打造网络通信系统-任务9:09.完成超时重传的逻辑
水水水水水水水水水水水水水水原创 2021-05-24 15:47:19 · 126 阅读 · 0 评论 -
Moba项目开发(一)打造网络通信系统-任务8:08.创建代理对象实现发送逻辑
文章目录1.USocket目的:提供socket发送的接口,以及socket接受的业务2.客户端代理3.代码BufferEntity 通信协议的细节规定USocket 初始化发送报文的接口UdpClient 网络报文的处理1.USocket目的:提供socket发送的接口,以及socket接受的业务1)修改public static UClient local; //客户端代理,主要做的是完成发送的逻辑和处理的逻辑,保证报文的顺序2)初始USocket完善原创 2021-05-23 23:46:02 · 133 阅读 · 0 评论 -
Moba项目开发(一)打造网络通信系统-任务7:07.封装网络初始化、发送、接收、关闭的接口
文章目录1.背景回顾介绍2.主要函数介绍3.代码1.背景回顾介绍1.上6回只是设计了通信报文的设计的类2.这次是写封装网络端口的类2.主要函数介绍1)接受报文+创建一个队列接受数据public async void ReceiveTask()2)发送报文public async void Send(byte[] data,IPEndPoint endPoint)3)发送ACK报文public async void SendACK(BufferEntity bufferEntity)4)原创 2021-05-23 12:40:53 · 148 阅读 · 0 评论 -
Moba项目开发(一)打造网络通信系统-任务6:06.编写构建ACK报文的接口和总结前面做了啥
文章目录1)构建请求报文2)构建收到的报文实体3)将报文反序列化成实体里面的成员4)创建一个ACK报文的实体接受反序列化好的数据,这里的package是收到报文实体后,已经反序列化好的5)代码1)构建请求报文public BufferEntity(IPEndPoint endPoint, int session, int sn, int moduleID, int messageType, int messageID, byte[] proto)2)构建收到的报文实体public BufferEnt原创 2021-05-22 17:31:11 · 125 阅读 · 0 评论 -
Moba项目开发(一)打造网络通信系统-任务5:05.编写报文反序列化的接口
文章目录1)需要一个构造函数,接受报文数据2)接受报文数据的具体函数Decode()3)用到的函数1)需要一个构造函数,接受报文数据 //需要一个构造函数,接受报文数据 public BufferEntity(IPEndPoint endPoint,byte[] buffer) { this.endPoint = endPoint; this.buffer = buffer; Decod原创 2021-05-22 17:06:13 · 100 阅读 · 0 评论 -
Moba项目开发(一)打造网络通信系统-任务4:04.编写报文序列化的接口
紧接任务3写编码的接口,也就是把这些成员组装成要发送的数据在 byte[]文章目录1)用BitConverter.GetBytes()将数据转为byte类型2)Array.Copy()将数据填充入3)若包是ACK包,则什么都不用做;否则是 业务数据包,追加业务的具体数据到包里4)数据一是返回数组数据,而是存在全局变量buffer里面5)代码1)用BitConverter.GetBytes()将数据转为byte类型2)Array.Copy()将数据填充入3)若包是ACK包,则什么都不用做;否则是 业务原创 2021-05-22 15:26:38 · 125 阅读 · 0 评论 -
Moba项目开发(一)打造网络通信系统-任务3:03.定制通信报文的格式
文章目录1)报文结构(1)包体大小-》用于确认报文的完整性(2)会话ID-》用于识别客户端的唯一性(3)序号-》用于保证报文的顺序(4)模块ID-》把报文传递给对应模块/程序(5)发送时间/时间戳-》用于判断是否超时(6)协议类型-》区分协议的细节(比如101要登录,102要注册)(7)协议ID-》用于区分业务(8)协议内容-》记录业务数据2)提供组装请求报文实体的接口3)提供组装ACK报文实体的接口4)提供解码的接口(1)通过该接口获取到包体大小、会话ID、序号、。。。(2)也就是将收到的消息转化为报文.原创 2021-05-21 23:48:28 · 198 阅读 · 1 评论 -
Moba项目开发(一)打造网络通信系统-任务2:网络系统如何设计
文章目录1)协议选择(1)tcp(2)要求保证**UDP的可靠连接**2)如何确定网络出现拥塞杜塞(1)根据某个报文重发次数来定(2)或者根据缓冲区中待发送的报文数据量来确定--发送方进行发送报文但是接受方一直没回复,可能是没收到要点:1)协议选择(1)tcp重发次数较多的话不适合实时性比较高的游戏,而且有头文件20个字节,所以一般都是使用udp在Moba游戏中;(2)要求保证UDP的可靠连接①要求报文的完整到达,也就是发送方要收到接收方的确认;②如何保证报文的顺序:(1)首先给报.原创 2021-05-21 23:35:08 · 198 阅读 · 1 评论 -
Moba项目开发(一)打造网络通信系统-任务1:课程介绍
总体框架原创 2021-05-21 14:25:29 · 215 阅读 · 0 评论