【Unity3D_常用模块】 Socket网络模块(超级详细完整,上线项目中稳定使用着)

原创 2016年09月23日 15:48:11

Socket网络连接模块

主要分为四部分:

一、套接字管理器(SocketManager.cs)

1)、连接



2)、断开


3)、接收(线程)


4)、发送(携程)

1.发送消息基本方法

2.二进制方式发送

        

3.protobuf方式发送

        


二、消息中心:(MessageCenter.cs)

1)游戏逻辑事件
a.事件缓存:
1.事件类型对应的数据缓存队列:_gameLogicDataQueue
2.事件类型对应的执行函数:_gameLogic_EventList
b.相关函数:
1.添加事件监听:AddEventListener(eGameLogicEventType _eventType, Callback_GameLogic_Handle _callback)2.移除事件监听:RemoveEventListener(eGameLogicEventType _eventType, Callback_GameLogic_Handle _callback)
3.推送、触发事件:PostEvent(eGameLogicEventType _eventType, object data = null)

2)、网络数据事件(线程)
a.事件缓存:
1.事件类型对应的数据缓存队列:_netMessageDataQueue
2.事件类型对应的执行函数:_netMessage_EventList
b.相关函数:
1.添加事件监听:addObsever(eProtocalType _protocalType, Callback_NetMessage_Handle _callback)
2.移除事件监听:removeObserver(eProtocalType _protocalType, Callback_NetMessage_Handle _callback)
3)、运行流程
a.创建单例:MessageCenter.Instance
b.循环检测:

三、数据封装:

1)网络数据缓冲器(DataBuff.cs)自动Size

a.参数定义:



2.添加数据到缓存中


3.从缓存中取出一条完整数据


2)、二进制字节流(ByteStreamBuff.cs)
在和服务器做数据交互的时候,最终要把数据转化成byte[],传给服务器。
如:

要将这些数据传给服务器,怎么变成byte[]数组呢?这里就要做一个数据封装。所有数据都是可以变成byte或byte[]来表示,要做的其实就是把这些数据拼成一个byte[]。

一般都是,顺序存,顺序取。

如:
写入:

读取:


这里已经对SendMsg做的重载,故直接传入,ByteStreamBuff或者,protobuf数据即可,SocketManager在发送前会转换为Byte[],再发送出去。

很多对数据的二进制封装的方法都是用byte[] 来做缓存媒介,所以在没事new 的时候,都要先给这个数据封装器,定一个大小,为了省事,所以这里用Stream作用缓存媒介。还有就是在封装器中有一个flip()函数,这里要再说一下,就是系统的大小端问题,如果前端是大端系统,后端是小端系统在数据交互的时候就会出问题了。细节就不解释了,百度(系统大小端)就可以了,不难理解的。

3)、谷歌ProtoBuffer序列化

a.现在手游这个用的很火。方便快捷,压缩效率也要。主要就是两个函数,序列化,反序列化。这个两方法封闭在SocketManager.cs中。

b.序列化


c.反序列化



四、简单流程图


五、总结
1.框架中只有接收数据的时候是在线程中,有高人建议我把发送数据也放到线程中,这个回头我再试试。
2.流程还算是比较清晰,如果有不明白的地方,可留言。或(QQ:8321884)
3.建议读者多看几遍流程书。好理解。

希望转载的朋友连接一下本文URL!!!!!!!!!!!!!!!!!!!!!!!!


点击下载项目工程




版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

《Unity 3D游戏客户端基础框架》 protobuf网络框架

前言:         protobuf是google的一个开源项目,主要的用途是: 1.数据存储(序列化和反序列化),例如xml和json等; 2.制作网络通信协议; 一、资源下载: 1.git...

Socket.IO for Unity 简要介绍和简单应用

在项目中使用到了Socket.IO for unity这个Asset Store上免费的库,这里将简要的介绍一下它的结构,已经使用中的注意事项。目录结构 上面为包的目录结构,简单的介绍一下具体的内容...

实用的Unity3D基于TCP/IP协议的网络通信框架--客户端

自己设计的一套实用的针对中小型网络游戏的网络通信框架

unity3D中使用Socket进行数据通信(三)

今天跟大家继续学习下socket,由于最近有个招标参数需要给之前的一款产品做教师端以及后台数据库部分,忙了将近两个礼拜,今天刚发布了,就继续我们的socket通信部分。          之前服务端一...

Unity3D —— Socket通信(C#)

在开始编写代码之前,我们首先需要明确:联网方式、联网步骤、数据收发以及协议数据格式         当然在设计时也应该减低代码的耦合性,尽量使得网络层可以在其他地方进行复用,这就需要我们进行接口式的开...

unity3D-----------socket客户端、服务器(简单)

客户端: using UnityEngine; using System.Collections; using System.Text; using System.Net; using System....

unity3D中使用Socket进行数据通信(一)

由于公司今年着重提高产品深度,通过对竞争产品的分析,发现我们的缺陷在于多人在线与后台管理部分,多人在线使用unity自带的Network可以搞定,后台部分前段时间主要研究了下Sqlite。由于sqli...

Unity3D中的Socket通信

设计为四个部分,第一部分接收发送数据,第二部分本地数据转换为字节发送到服务器包括发送包长度,包头,加密,具体内容等.第三部分接收byte转换为数据.第四部分监听. 第一部分简单示例:连接服务...

unity3D中使用Socket进行数据通信(二)

上一篇博客主要介绍了使用socket搭建服务端和客户端程序,这一篇来说说socket的数据传输,我们使用socket的目的是解决点对点之间的数据传输,之前提到了socket中一个重要的概念:端口。而s...

Unity3D 使用异步socket通讯

C# 中Socket的异步方法,都是以Begin开始表示开启异步调用,以End开始表示结束异步调用线程。根据官方文档的介绍,Begin方法会在后台开启线程操作,完成后回调注册函数。分为三个部分,建立连...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【Unity3D_常用模块】 Socket网络模块(超级详细完整,上线项目中稳定使用着)
举报原因:
原因补充:

(最多只允许输入30个字)