根据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数据传输和处理。
(未完成,待续)