上个月看到朋友推荐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网络图书馆评测的更多相关文章

  1. muduo网络库使用心得

    上个月看了朋友推荐的mudo网络库,下完代码得知是国内同行的开源作品,甚是敬佩.下了mudo使用手冊和035版的代码看了下结构,感觉是一个比較成熟并且方便使用的网络库.本人手头也有自己的网络库,尽管不 ...

  2. Muduo 网络编程示例之零:前言

    陈硕 (giantchen_AT_gmail)Blog.csdn.net/Solstice Muduo 全系列文章列表: http://blog.csdn.net/Solstice/category/ ...

  3. muduo网络库架构总结

    目录 muduo网络库简介 muduo网络库模块组成 Recator反应器 EventLoop的两个组件 TimerQueue定时器 Eventfd Connector和Acceptor连接器和监听器 ...

  4. muduo网络库学习笔记(五) 链接器Connector与监听器Acceptor

    目录 muduo网络库学习笔记(五) 链接器Connector与监听器Acceptor Connector 系统函数connect 处理非阻塞connect的步骤: Connetor时序图 Accep ...

  5. muduo网络库学习笔记(四) 通过eventfd实现的事件通知机制

    目录 muduo网络库学习笔记(四) 通过eventfd实现的事件通知机制 eventfd的使用 eventfd系统函数 使用示例 EventLoop对eventfd的封装 工作时序 runInLoo ...

  6. muduo网络库学习笔记(三)TimerQueue定时器队列

    目录 muduo网络库学习笔记(三)TimerQueue定时器队列 Linux中的时间函数 timerfd简单使用介绍 timerfd示例 muduo中对timerfd的封装 TimerQueue的结 ...

  7. muduo 网络库学习之路(一)

    前提介绍: 本人是一名大三学生,主要使用C++开发,兴趣是高性能的服务器方面. 网络开发离不开网络库,所以今天开始学一个新的网络库,陈老师的muduo库 我参考的书籍就是陈老师自己关于muduo而编著 ...

  8. 陈硕 - Linux 多线程服务端编程 - muduo 网络库作者

    http://chenshuo.com/book/ Muduo网络库源码分析(一) EventLoop事件循环(Poller和Channel)http://blog.csdn.net/nk_test/ ...

  9. Muduo网络库实战(二):实现服务器与客户端的连接

    1. 方案的确定 1)基本需求 用户1000+, IO压力不大: 多个客户端打开网站,输入查询字符串strclient,发送给服务器=>服务器接收客户端发过来的数据并处理,将结果返回给客户端: ...

随机推荐

  1. js基础语法(一)

    学习网站参考:http://www.w3school.com.cn/ 写入html输出: document.write('test out put'); 例子: http://www.w3school ...

  2. sharepoint 2010 显示和隐藏Ribbon区域条

    在sharepoint 2010的页面中,我们在页面的最上方,有一条深灰色的Ribbon工具栏,如下图,这里可以通过下面的脚本,做一些脚本,来控制它的隐藏和显示. 最后把这些脚本,放在v4.maste ...

  3. Virtualbox mouse move in and out and file share with windows

    How to use Virstalbox to share files with Linux and Windows, and to move the mouse in and out Virtua ...

  4. Linux创建修改删除用户和组

    Linux 创建修改删除用户和组 介绍 在日常的维护过程中创建用户操作用的相对会多一些,但是在这个过程中涉及到的知识点就不单单就是useradd了,接下来就来详细了解账号管理的相关信息. 用户信息 先 ...

  5. JAVA - 优雅的记录日志(log4j实战篇) (转)

    写在前面 项目开发中,记录错误日志有以下好处: 方便调试 便于发现系统运行过程中的错误 存储业务数据,便于后期分析 在java中,记录日志有很多种方式: 自己实现 自己写类,将日志数据,以io操作方式 ...

  6. Hibernate学习之createSQLQuery与createQuery的区别及使用

    hibernate中createQuery与createSQLQuery:前者用的hql语句进行查询,后者可以用sql语句查询,前者以hibernate生成的Bean为对象装入list返回,后者则是以 ...

  7. hdu4738(双连通分量)

    传送门:Caocao's Bridges 题意:n个岛,曹操在一些岛之间建了一些桥,每个桥上有一些士兵把守,周瑜只有一个炸弹只能炸掉一个桥,并能使一些岛被孤立出来,炸弹需要士兵带过去,士兵的数量不能小 ...

  8. Drools学习笔记-01-在eclipse indgo集成Drools5.5

    1.1.条件 Drools它是一个基于Java开源规则引擎.因此,使用Drools以及前需要安装在开发机器JDK周边环境,Drools5.5需要JDK版本号的1.5或者更多. 1.2.开发环境搭建 大 ...

  9. nginx 301跳转到带www域名方法rewrite(转)

    首先一.得在你的域名管理里面定义 test.com和www.test.com指向你的主机ip地址,我们可以使用nslookup命令测试:直接输入 nslookup test.com和nslookup ...

  10. gcc的bug? c++模板类中友元函数的訪问权限问题

    原文地址:http://stackoverflow.com/q/23171337/3309790 在c++中,模板类中能够直接定义一个友元函数.该函数拥有訪问该模板类非public成员的权限. 比方: ...