转载自:http://blog.csdn.net/claine/article/details/52374546

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!!!!!!!!!!!!!!!!!!!!!!!!

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

  1. 最最最详细的springboot项目中集成微信扫码登入功能.步骤代码超级详细(OAuth2)

    说到登录注册,就会想到先要注册一个用户名,在进行登入,但是现在大多数的网站都集成了微信登入,不需要注册,给你一个二维码,微信一扫直接登录.这确实是十分便捷的.所以我们会尽量在项目中实现这一功能.减少用 ...

  2. java socket建立长连接_Java Web项目中使用Socket通信多线程、长连接的方法

    很多时候在javaweb项目中我们需要用到Socket通信来实现功能,在web中使用Socket我们需要建立一个监听程序,在程序启动时,启动socket监听.我们的应用场景是在java项目中,需要外接 ...

  3. 非常详细完整的项目实施管理流程

    具体详细的项目实施流程看下图: 如有疑问请留言,欢迎探讨,如有帮助请点点关注,干货天天有.

  4. 写给笨蛋徒弟的学习手册(1)——完整C#项目中各个文件含义

    Bin 目录用来存放编译的结果,bin是二进制binrary的英文缩写,因为最初C编译的程序文件都是二进制文件,它有Debug和Release两个版本,分别对应的文件夹为bin/Debug和bin/R ...

  5. php订单模块解耦,PHP快速使用RabbitMQ实现项目中部分业务的解耦

    PHP快速使用RabbitMQ实现项目中部分业务的解耦 步骤: 1. Linux安装完rabbitMQ后,没有配置文件,需要去github(https://github.com/rabbitmq/ra ...

  6. maven配置自动部署到服务器上,jenkins+svn+maven安装配置并自动化部署成功(超级详细)...

    jenkins+svn+maven安装配置并自动化部署成功(超级详细) jenkins+svn+maven安装配置并自动化部署成功(超级详细) 简言 写这篇博客的原因是因为每次部署服务器的流程都是在做 ...

  7. Windows安装华为Mindspore,手把手操作,超级详细

    Windows安装华为Mindspore,手把手操作,超级详细 在base环境中,输入conda create -n mindspore python=3.7.5,创建一个新环境 conda crea ...

  8. Python 21 常用模块02

    常用模块02 1. 什么是序列化 在python中存在三种序列化的方案 pickle. 可以将我们python中的任意数据类型转化成bytes并写入到⽂件中. 同样也可以把文件中写好的bytes转换回 ...

  9. jacoco测试代码覆盖率_使用Jacoco测量多模块Android项目中的单元测试覆盖率:第2部分

    jacoco测试代码覆盖率 In the first article, we discovered one of the two key Gradle commands which come with ...

  10. ANSIBLE的安装和常用模块使用详细教程

    ANSIBLE安装和各种模块应用功能 文章目录 ANSIBLE安装和各种模块应用功能 安装配置ANSIBLE ANSIBLE使用 ansible-galaxy工具 ansible-pull工具 ans ...

最新文章

  1. upgrade lnmpa php.sh,LNMP 状态管理命令说明及Nginx、MySQL/MariaDB、PHP升级教程
  2. 操作系统的功能和特征
  3. 剑指offer--二维数组的查找
  4. Servlet技术简介与编写、编译Servlet程序
  5. hbuid 集成svn_HBuilder如何配置SVN的步骤详解
  6. 配置ssl证书_Mysql配置ssl证书
  7. 【文献阅读】Fashion-MNIST: a Novel Image Dataset for Benchmarking Machine Learning Algorithms
  8. 看了部电影——青春期
  9. 超图软件 linux gis软件,超图(GIS)软件详细功能介绍.doc
  10. 质量功能展开(QFD)基础知识必备
  11. 利用dns特性把普通域用户提升到域管理员权限
  12. 文本处理命令 cat more less cut wc sort uniq
  13. Python相关库的安装
  14. MFC控件绘制透明png图片或者半透明图片
  15. 如何将镜像文件上传到服务器,通过把docker镜像保存为文件载入到别的服务器
  16. android metal api,Metal 简述及其API
  17. vue的头像生成神奇
  18. 2012.10.8中电科某司笔试
  19. 服务器装系统bios需要设置吗,u盘装系统bios设置
  20. python手机端自动点赞软件_python自动点赞功能的实现思路

热门文章

  1. python 绘制一维散点图
  2. 追寻职业榜样计算机论文翻译,追寻职业榜样征文
  3. 计算机识别不到硬盘,电脑检测不到硬盘怎么办,怎么修复硬盘问题
  4. OriginPro中三维图片旋转
  5. 手机H5-调用百度地图导航
  6. 怎么找回服务器开机密码,如果忘了 开机密码该怎么办
  7. 关于amd cpu超频 个人心得
  8. 大数据处理应遵循的四大原则
  9. 众手游公司崛起:腾讯“主营收入”面临危机!
  10. SH-SSS丨《端到端音视频说话人日志网络》论文线上分享