博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
muduo网络图书馆评测
阅读量:5748 次
发布时间:2019-06-18

本文共 1355 字,大约阅读时间需要 4 分钟。

上个月看到朋友推荐mudo网络图书馆,该代码是在国内同行中,开源工程后,甚至钦佩。

根据mudo手动和035代码的版本看起来正在建设中。感觉是一个比较成熟且易于使用的网络库。我的手也有自己的网络库,虽然不敢说有多么强大的网络图书馆。但经过几年的网络之外也稳定运行,30w左右,单组server也能跑上w人。做游戏server几年的经验,感觉稳定性才是网游server最核心最重要的环节,效率还在其次,这也是眼下网游server普遍採用分组架构决定的,从运营的角度来看,有时候一组server即使上限能跑上w人,但运营会强制把上限定位几k人,这里面跟游戏玩法还有运营的手段有关系,就不细说了!

 

muduo採用的是基于消息回调机制的reactor模式,这也是眼下网络库经常使用的模式。

整个网络库的使用比較方便,仅仅须要关心几个tcp事件:tcp连接。收数据。tcp关闭等,这几个事件分别注冊好回调函数就能够简单使用。

具体的用法看 陈硕的muduo网络库使用手冊就能够。

      假设要把muduo结合到一般的游戏server里面,则最主要的还须要增加组包和打包,假设是对外通讯则还须要加解密模块。參考的方法例如以下:
第一步,须要定义一个 gameserver这种基类。该类负责做为游戏tcp服务端(无论是网关服务器或者逻辑服务器都等都可能须要使用tcp服务端)。所以必须包括tcpserver。并把tcp的接受连接和收数据,关闭连接等事件注冊到tcpserver的回调。

第二步:当tcp连接回调onconnection之后。须要new一个新的logicsession(该logicsession就是负责处理数据组包和加解密,消息队列等的类)。能够建立一个tcpconnection指针到logicsession的映射。 当tcp连接回调onmessage之后。依据tcpconnection键值找到logicsession,把数据push到logicsession类
      第三步: logicsession收到数据后,须要定义一个消息队列类,比如msgqueqe类,负责把收到的二进制数据解密组包等操作,而且把组好的包存放到消息队列中,以供之后的游戏逻辑使用。

    完毕了以上几步之后,能够開始干活了。

比如要建立一个游戏网关,则仅仅须要定义一个clientserver类继承gameserver(定义clientserver的原因是由于每一个tcp服务所要做的事情可能都不一样。所以须要依据自身需求实现自己的子类。比如游戏网关肯定是要统计连接人数等,则须要在clientserver中暴露获取logicsession个数的接口)。并new一个clientserver传入port。比如port20000,则開始侦听来自20000port的tcp连接,接收到连接数据后。自己主动由logicsession处理并保存到每一个连接自己的消息队列中。

假设游戏服务器逻辑是单线程,然后,只需要启动一个线程遍历所有的20000port的logicsession,并且每个logicsession消息队列pop出来,并分配给相应的单位报文处理模块。因此,它可以完成从客户端游戏的一个简单的网关tcp数据传输和处理。

(未完成,待续)

转载地址:http://tchzx.baihongyu.com/

你可能感兴趣的文章
公司新年第一次全员大会小记
查看>>
最懒的程序员
查看>>
了解Amdahl定理,该定理再多核时代有怎样的影响?
查看>>
JAVA8 Stream 浅析
查看>>
inner join on, left join on, right join on要详细点的介绍
查看>>
SAS vs SSD对比测试MySQL tpch性能
查看>>
流言揭秘:吃黑巧克力就不发胖?
查看>>
Spring boot 整合CXF webservice 全部被拦截的问题
查看>>
关于JavaProcess的一些笔记
查看>>
Pinpoint跨节点统计失败
查看>>
Hive体系结构
查看>>
时间戳转换为时间(不为1970)
查看>>
win2003 NAT 访问互联网
查看>>
【Canal源码分析】Canal Server的启动和停止过程
查看>>
机房带宽暴涨问题分析及解决方法
查看>>
英语能力的培养
查看>>
wdOS系统下源码编译安装LAMP环境(linux+apache+php+mysql)
查看>>
iOS 绕过相册权限漏洞
查看>>
我的友情链接
查看>>
XP 安装ORACLE
查看>>