NGServer的核心概念便是服务(Service),它对逻辑层表现为一个线程,处理各种特定的相关业务。如日志服务(LogService),数据库服务(DBService),登录服务(LoginService)。服务之间通过消息进行交互。Service实际上并不是一个独立线程,Service与线程是一种”多对多”的关系。即所有的Service通过ServiceManager来管理,后者维护一个线程池,并将线程池与”服务池”以某种调度方式关联,让线程充分被利用。

下面由下至上对Service框架和运行机制简单阐述:

阅读全文 »

在网络编程模型中,一个Session代表一次会话,主要维护网络数据的发送和接收。对外提供发送数据和处理数据的接口。一个高效的Session主要通过缓冲和异步来提高IO效率。NGServer的Session运用双缓冲和boost::asio的异步机制,很好地做到了这一点。

一. 双缓冲

在网络IO中,读写线程的互斥访问一直都是一个关乎性能的大问题。为了减少互斥锁的使用,环形缓冲和双缓冲是常见的策略。NGServer使用后者作为消息和数据缓冲。
在NGServer MessageQueue.h中,定义了两种双缓冲:基于消息的MessageQueue和基于数据的ByteBuff。下面简要介绍ByteBuff类:

ByteBuff类的基本思想是通过两个缓冲区_buff_read和_buff_write来使读写分离。通过size_t Push(const char* data, size_t len)来写入数据:

阅读全文 »

NGServer是一个迷你型C++游戏服务器框架。Github地址:https://github.com/wudaijun/NGServer。

主要特性:

  • 框架用C++(11)和boost库实现。
  • 基于单进程多线程。
  • 框架屏蔽了多线程实现,上层体现为服务(Service),服务之间通过消息进行通信。
  • 有比较完善灵活的的消息回调和序列化机制,更方便地实现RPC。
阅读全文 »