muduo网络图书馆评测

上个月看到朋友推荐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数据传输和处理。




(未完成。待续)

posted @ 2015-06-22 14:53  hrhguanli  阅读(234)  评论(0编辑  收藏  举报