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数据传输和处理。
(未完成。待续)
muduo网络图书馆评测的更多相关文章
- muduo网络库使用心得
上个月看了朋友推荐的mudo网络库,下完代码得知是国内同行的开源作品,甚是敬佩.下了mudo使用手冊和035版的代码看了下结构,感觉是一个比較成熟并且方便使用的网络库.本人手头也有自己的网络库,尽管不 ...
- Muduo 网络编程示例之零:前言
陈硕 (giantchen_AT_gmail)Blog.csdn.net/Solstice Muduo 全系列文章列表: http://blog.csdn.net/Solstice/category/ ...
- muduo网络库架构总结
目录 muduo网络库简介 muduo网络库模块组成 Recator反应器 EventLoop的两个组件 TimerQueue定时器 Eventfd Connector和Acceptor连接器和监听器 ...
- muduo网络库学习笔记(五) 链接器Connector与监听器Acceptor
目录 muduo网络库学习笔记(五) 链接器Connector与监听器Acceptor Connector 系统函数connect 处理非阻塞connect的步骤: Connetor时序图 Accep ...
- muduo网络库学习笔记(四) 通过eventfd实现的事件通知机制
目录 muduo网络库学习笔记(四) 通过eventfd实现的事件通知机制 eventfd的使用 eventfd系统函数 使用示例 EventLoop对eventfd的封装 工作时序 runInLoo ...
- muduo网络库学习笔记(三)TimerQueue定时器队列
目录 muduo网络库学习笔记(三)TimerQueue定时器队列 Linux中的时间函数 timerfd简单使用介绍 timerfd示例 muduo中对timerfd的封装 TimerQueue的结 ...
- muduo 网络库学习之路(一)
前提介绍: 本人是一名大三学生,主要使用C++开发,兴趣是高性能的服务器方面. 网络开发离不开网络库,所以今天开始学一个新的网络库,陈老师的muduo库 我参考的书籍就是陈老师自己关于muduo而编著 ...
- 陈硕 - Linux 多线程服务端编程 - muduo 网络库作者
http://chenshuo.com/book/ Muduo网络库源码分析(一) EventLoop事件循环(Poller和Channel)http://blog.csdn.net/nk_test/ ...
- Muduo网络库实战(二):实现服务器与客户端的连接
1. 方案的确定 1)基本需求 用户1000+, IO压力不大: 多个客户端打开网站,输入查询字符串strclient,发送给服务器=>服务器接收客户端发过来的数据并处理,将结果返回给客户端: ...
随机推荐
- hadoop format过程
private static boolean format(Configuration conf, boolean isConfirmationNeeded ) throws IOException ...
- If-Modified-Since页面是否更新
第一次先请求某个网页,抓取到本地,假设文件名为 a.html.这时文件系统有个文件的修改时间. 第二次访问网页,如果发现本地已经有了 a.html,则向服务器发送一个 If-Modified-Sinc ...
- Common Lisp第三方库介绍 | (R "think-of-lisper" 'Albertlee)
Common Lisp第三方库介绍 | (R "think-of-lisper" 'Albertlee) Common Lisp第三方库介绍 一个丰富且高质量的开发库集合,对于实际 ...
- RotateDisp – 一键旋转显示画面 - 小众软件
RotateDisp – 一键旋转显示画面 - 小众软件 RotateDisp – 一键旋转显示画面
- Codeforces325-B(二分搜索)
题目:B. Stadium and Games 分析:问题可以转化为下面的等式求解问题: 由于n在10^18范围内,所以k的范围是从0到63即可,这样就可以枚举k,二分m,然后所有符合条件的就是答案了 ...
- 解决SQL查询总是超时已过期
解决SQL查询总是超时已过期 .在WIN8里提示:OLE DB 或 ODBC 错误 : 查询超时已过期; HYT00 1.由于数据库设计问题造成SQL数据库新增数据时超时 症状: Microso ...
- redis优化配置和redis.conf说明
1. redis.conf 配置參数: #是否作为守护进程执行 daemonize yes #如以后台进程执行,则需指定一个pid,默觉得/var/run/redis.pid pidfile redi ...
- 【从翻译mos文章】SGA_TARGET与SHMMAX关系
SGA_TARGET与SHMMAX关系 参考原始: Relationship Between SGA_TARGET and SHMMAX (文件 ID 1527109.1) 申请: Oracle Da ...
- asp.net EF6.0中出现未找到具有固定名称“System.Data.SqlClient”的 ADO.NET提供程序的实体框架提供程序解决办法
出现的错误信息如下所示: 指定的架构无效.错误: DataModel.ssdl(2,2) : 错误 0152: 未找到具有固定名称“System.Data.SqlClient”的 ADO.NET 提 ...
- PSD 学位涵义 Poor, Smart and Deep desire to become rich 的缩写,不是真正的学位认证,是对一种心理状态的形容,所谓PSD学位是形容那些贫穷,但是很聪明,很深…_●.×
PSD 学位涵义 Poor, Smart and Deep desire to become rich 的缩写,不是真正的学位认证,是对一种心理状态的形容,所谓PSD学位是形容那些贫穷,但是很聪明,很 ...