![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
网络通信
PureDesigner
这个作者很懒,什么都没留下…
展开
-
Unity tcp多线程网络层框架(一)数据结构
Unity tcp多线程网络层框架(一)数据结构概述和大多数游戏相同,之前我们游戏的客户端采用lua的csocket作为网络底层,由于该库是采用selec和iocp作为底层库,是同步非阻塞的的io方式,所以客户端的处理是在每个update中,受限于客户端性能,仅仅处理30个包,如果服务器优化堪忧,发送大量小包,就会出现数据堆积,直到服务器踢掉客户端。为了处理该问题,我们设计了新的网络层。使用多线程,将协议解析,反序列化,解密的工作放到其他线程。对协议进行整理,同帧内的部分协议被优化。使用多线程原创 2020-10-07 11:13:51 · 687 阅读 · 1 评论 -
Asio游戏网络中间件设计(三)数据结构
文章目录Asio游戏网络中间件设计(三)数据结构临时缓存无锁队列其他数据结构Asio游戏网络中间件设计(三)数据结构网络通信中有几种必要的数据结构,满足线程安全,高可复用等要求。临时缓存用于与内核缓冲区交互,由于在实现应用层协议时,常常要添加(或移除)包头等数据,为了减少memcpy的次数,我们将数据区以外的部分作为动态区,通过控制offset来保证数据的有效区域。template <size_t SIZE>class reusabel_buffer :public std::ena原创 2020-09-11 20:27:27 · 189 阅读 · 0 评论 -
Asio游戏网络中间件设计(二)内存管理
文章目录Asio游戏网络中间件设计(二)内存管理目标对象池线程缓存线程生命周期管理线程安全的单例线程安全内存池用例Asio游戏网络中间件设计(二)内存管理目标网络层中会产生大量内存碎片,而且频繁地申请内存也影响效率,所以需要设计内存池来管理。为了避免线程context切换时的开销,设计中尽量避免使用锁。对象池namespace parallel_core{ template<class T> class ObjectPool { public: ObjectPool()原创 2020-09-11 19:52:57 · 288 阅读 · 0 评论 -
Asio游戏网络中间件设计(一)并发设计
文章目录Asio游戏网络中间件设计(一)并发设计需求来源网络库选择并发结构设计逻辑的有序性Job systemAsio游戏网络中间件设计(一)并发设计需求来源公司的游戏服务器网络层采用的是第三方闭源的静态库,然后在实际生产中出现了一些问题如下:网络流量很高,在目标容量为千人的momo游戏服务器上,达到了30m/s以上的流量。在高频次的小包发送时,客户端容易出现网络中断被kick的情况。延迟较高,在内网测试时,达到单边30-50ms的延迟。由于网络层是闭源的,难以准确定位问题,只能凭黑盒测试原创 2020-09-11 17:13:33 · 498 阅读 · 0 评论