http://blog.csdn.net/herm_lib daemon.huang # gmail # com
1.1 什么是Herm
Herm是一套快速开发高性能的网络应用的C++库,主要针对网络游戏服务器提供全套解决方案,包括接入、网游逻辑、数据缓存和持久化组件。但同时Herm也适合可以用于即时通信、流媒体、文件下载、P2P(Socket组件实现的细节已经考虑到对TCP穿透的支持)等基于TCP/IP的网络应用。
Herm包括的组件:
(1)base
最基础的组件,提供线程、一读一写线程不加锁的ring buffer、二进制消息解析器、支持多态的对象管理器和可支持多线程写入的完整的日志模块等。
用面向对象和泛型的方法抽象了TCP/UDP的Socket IOs;抽象了Win32 Select、Linux epoll和FreeBSD kqueue的多路复用API。统一了三者水平模式(Level Triggered)的语义(一套代码在Win32/Linux/FreeBSD运行结果是一样的),Linux上也支持了边缘模式(Edge Triggered)。
基于base其他功能,抽象出Network,Peer和Session对象,为外层提供了最终网络组件(Net)。
(2)app
为业务进程提供基础功能的框架,实现了linux上各种daemon进程常见的功能(start,stop等)。
(3) cached
基于(1)(2)实现的缓存和持久化的中间件。见这里介绍:http://blog.csdn.net/herm_lib/article/details/8171196
Herm目前仅支持Linux/Windows/FreeBSD 32bits平台。调用者可以基于不同的需求使用不同的组件。
1.2 最简单的例子
本节给出两个分别用app和base/socket组件实现的简单TCP Server的例子。所有的例子可以参考examples frameworks和multiplexors目录。
1.2.1 用app组件(主要用了base/net的组件)实现TCP Server
首先,实现一个Listener,
实现一个App,
1.2.2 用Socket组件实现TCP Server
用Socket组件实现TCP Server更灵活,但实现者要做一些额外的工作,比如tcp stream解析,缓冲队列处理等等。
首先实现一个AcceptHandler,处理Client连接,
实现StreamHandler, 处理数据收发,
最后,在一个线程里把上面Handler执行起来,
1.3 下一章话题
下章将较详细地介绍Framework组件,主要介绍如何用Framework实现真实可用的网络游戏的接入网关Server(gated)和逻辑Server(zoned)。