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

(未完成,待续)

转载于:https://www.cnblogs.com/blfshiye/p/4590175.html

muduo网络图书馆评测相关推荐

  1. Muduo 网络编程示例之四:Twisted Finger

    陈硕 (giantchen_AT_gmail) Blog.csdn.net/Solstice 这是<Muduo 网络编程示例>系列的第四篇文章. Muduo 全系列文章列表: http:/ ...

  2. muduo网络库学习(八)事件驱动循环线程池EventLoopThreadPool

    muduo是支持多线程的网络库,在muduo网络库学习(七)用于创建服务器的类TcpServer中也提及了TcpServer中有一个事件驱动循环线程池,线程池中存在大量线程,每个线程运行一个Event ...

  3. muduo网络库学习(七)用于创建服务器的类TcpServer

    目前为止,涉及到的绝大多数操作都没有提及线程,EventLoop,Poller,Channel,Acceptor,TcpConnection,这些对象的执行都是在单独线程完成,并没有设计多线程的创建销 ...

  4. muduo网络库学习(四)事件驱动循环EventLoop

    muduo的设计采用高并发服务器框架中的one loop per thread模式,即一个线程一个事件循环. 这里的loop,其实就是muduo中的EventLoop,所以到目前为止,不管是Polle ...

  5. Muduo 网络编程示例之五: 测量两台机器的网络延迟

    Muduo 网络编程示例之五: 测量两台机器的网络延迟 陈硕 (giantchen_AT_gmail) Blog.csdn.net/Solstice  t.sina.com.cn/giantchen ...

  6. muduo网络库源码阅读Step by Step

    Posted on: Nov 26 2015 Categories: muduo C++ Tags: muduo 一般写服务端程序都需要有一个称手的网络库来帮我们处理琐碎的网络通信细节,比如连接的建立 ...

  7. Muduo 网络编程示例之三:定时器

    陈硕 (giantchen_AT_gmail) Blog.csdn.net/Solstice 这是<Muduo 网络编程示例>系列的第三篇文章. Muduo 全系列文章列表: http:/ ...

  8. 基于C++11的muduo网络库

    文章目录 写在前面 项目编译问题 库安装的问题 项目测试代码 关于压力测试 项目概述 muduo网络库的reactor模型 muduo的设计 muduo各个类 辅助类 NonCopyable Time ...

  9. muduo网络库源码复现笔记(十七):什么都不做的EventLoop

    Muduo网络库简介 muduo 是一个基于 Reactor 模式的现代 C++ 网络库,作者陈硕.它采用非阻塞 IO 模型,基于事件驱动和回调,原生支持多核多线程,适合编写 Linux 服务端多线程 ...

最新文章

  1. Linux 忘记密码如何登陆—续篇2救援模式
  2. Mysql报错Fatal error: Can#39;t open and lock privilege tables: Table #39;mysql.host#39; doesn#39;t...
  3. SQLServer表内自关联级联删除
  4. golang 编译提示 cannot assign interface {} 和golang断言使用
  5. struts2之单个文件上传(特别推荐)
  6. React中后台管理系统添加广告分类显示不出来
  7. 计算机网络的拓扑模型,基于复杂网络模型的计算机网络拓扑结构研究
  8. 假如有Thread1、Thread2、ThreaD3、Thread4四条线程分别统计C、D、E、F四个盘的大小,所有线程都统计完毕交给Thread5线程去做汇总,应当如何实现?
  9. 银辉给园子里的兄弟姐妹们拜年啦
  10. 小米2系列板砖自救行动
  11. vue使用Swiper页面中有滚动条,为什么鼠标滚轮不起作用呢?
  12. 我在名牌大学毕业后的经历——曾经努力过,就不会后悔
  13. dhcp服务器怎么设置虚拟网段,配置DHCP服务器不同网段分配ip
  14. Lightgbm模型两种保存方式
  15. MySql 高级查询强化学习
  16. java格式化html代码
  17. opencv c++ Harris角点检测、shi-tomasi角点
  18. 可汗学院”(Khan Academy)提出的考验智商的谜题
  19. 在word中粘贴的图片为什么显示不完整
  20. Django项目 no signature found for builtin错误原因

热门文章

  1. 通过实例看懂diff命令输出
  2. 致加西亚的信 - 摘录
  3. java 蓝桥杯训练 数的统计
  4. 动态污点分析隐式流--动静结合的解决方法
  5. Xilinx FPGA PLL输出不能直接连接IO解决方法
  6. mysql多张表join_mysql 连接查询(多表查询)+子查询-初学教程 3【重点】
  7. python 静态方法_Python编程思想(25):方法深度解析
  8. 第九章——计数器/定时器和多功能接口芯片
  9. wireshark 过滤表达式
  10. X_Forwarded_for 获得真实IP