【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...
  • linshuhe1
  • linshuhe1
  • 2016年08月25日 19:44
  • 8976

Unity3D —— Socket通信(C#)

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

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

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

[Unity通信]一个基于socket的3DARPG网络游戏(一):建立连接和事件分发

一.客户端 1.定义一个消息体,服务器和客户端通信的时候,传输的就是这样的信息。 using System.Collections; using System.Text; public cl...
  • lyh916
  • lyh916
  • 2015年11月19日 20:08
  • 4365

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

自己设计的一套实用的针对中小型网络游戏的网络通信框架
  • qq_16763249
  • qq_16763249
  • 2016年11月30日 13:21
  • 3721

Unity3D socket

1年前的unity3D项目里面之封装了引擎层。完全没涉及到服务器收发。 最近继续深入u3d了。打算弄个框架。自然这个socket要我自己写了。花了1天的时间大概写好了。自己写了一个服务器一个客户端测...
  • lusuo778
  • lusuo778
  • 2012年10月21日 19:59
  • 7136

Socket网络模块(Unity c#)

  • 2016年09月23日 15:52
  • 1.26MB
  • 下载

使用unity UGUI 利用Socket 实现 多客户端通讯

unity  5.1.1   VS2013 服务器端:using System; using System.Collections.Generic; using System.Linq; using ...
  • shanshui21
  • shanshui21
  • 2015年12月11日 10:53
  • 1503

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

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

unity3d socket( unity socket )客户端通信插件-在Unity3d中的简易实现网游客户端通信框架

出售客户端socket通信插件¥20,自己搭建的成本远高于¥20.有意者联系 mysocketclient@qq.com  1.客户端socket通信插件!经过测试兼容window/linux/mac...
  • mysocketclient
  • mysocketclient
  • 2014年09月01日 11:26
  • 2341
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【Unity3D_常用模块】 Socket网络模块(超级详细完整,上线项目中稳定使用着)
举报原因:
原因补充:

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