【文件属性】:
文件名称:Herm(一套快速开发高性能的网络应用的C++库)
文件大小:53KB
文件格式:7Z
更新时间:2013-11-15 12:08:51
C++ Herm 网络 高性能
1.1 什么是Herm
Herm是一套快速开发高性能的网络应用的C++库。比如开发网络游戏、即时通信、流媒体、文件下载、P2P等基于TCP/IP网络应用。
Herm包括三个组件:
(1)Utilities
最基础的组件,提供线程、一读一写线程不加锁的ring buffer、二进制消息解析器、支持多态的对象管理器等。
(2)Socket
用面向对象和泛型的方法抽象了TCP/UDP的Socket IOs;抽象了Win32 Select、Linux epoll和FreeBSD kqueue的多路复用API。统一了三者水平模式(Level Triggered)的语义(一套代码在Win32/Linux/FreeBSD运行结果是一样的),Linux上也支持了边缘模式(Edge Triggered)。
(3)Framework
基于Utilities和Socket的简化开发网络应用的框架,抽象出Peer和Session对象。Peer和Session对象以及Framework实现的功能将在第2章介绍。
Herm目前仅支持Linux/Windows/FreeBSD 32bits平台。调用者可以基于不同的需求使用不用的组件。
1.2 最简单的例子
本节给出两个分别用Framework和Socket组件实现的简单TCP Server的例子。所有的例子可以参考examples frameworks和multiplexors目录。
1.2.1 用Framework实现TCP Server
首先,实现一个Listener,
class Listener : public Herm::Listener
{
virtual void Accept(Herm::Session* session)
{
// 在这里得到一个于客户端通信的Session
// 注册用于处理收到的消息的handler
// 用Session::Push将数据写到发送buffer,最终数据传给client
}
};
实现一个App,
class App : public Herm::App
{
virtual bool Init()
{
// 1. 创建Network
Herm::Network* net = CreateNetwork();
// 2. 创建一个TCP Server Peer,将Listener注册到Peer,进行监听
Herm::Peer* peer = net->CreateTCPServer(addr, new Listener);
}
};
1.2.2 用Socket实现TCP Server
用Socket实现TCP Server更灵活,但实现者要做一些额外的工作,比如tcp stream解析,缓冲队列处理等等。
首先实现一个AcceptHandler,处理Client连接,
class AcceptHandler : public Herm::EventHandler
{
virtual int Receive(int)
{
m_acceptor->Accept(streamHandler->GetStream());
g_reactor->Register(streamHandler, Herm::READ_MASK);
...
}
private:
Herm::Acceptor* m_acceptor;
};
实现StreamHandler, 处理数据收发,
class StreamHandler : public Herm::EventHandler
{
// Handle onle int param on FreeBSD, pls see the example of FreeBSD_tcp_server
virtual int Receive(int)
{
m_stream->Recieve(buf, .......);
.....
}
private:
Herm::Stream* m_stream;
};
最后,在一个线程里把上面Handler执行起来,
while (true)
g_reactor->Run();
1.3 Herm地址
https://sourceforge.net/projects/speed/
1.4 下一章话题
下章将较详细地介绍Framework组件,主要介绍如何用Framework实现真实可用的网络游戏的接入网关Server(gated)和逻辑Server(zoned)。
转这个主要是看代码质量不错. 转自CSDN的herm_lib
http://hi.csdn.net/herm_lib
网友评论
- 感觉也不是很好用,一般吧
- 用了一下~ 还是不错的~ 很好用,但是现在应用规模较小,不知道能不能扛过大压力