- 論壇徽章:
- 0
|
本帖最后由 daem0n 于 2010-10-24 16:29 編輯
第1章 概述
1.1 什么是Herm
Herm是一套快速開發(fā)高性能的網(wǎng)絡(luò)應(yīng)用的C++庫。比如開發(fā)網(wǎng)絡(luò)游戲、即時(shí)通信、流媒體、文件下載、P2P等基于TCP/IP網(wǎng)絡(luò)應(yīng)用。
Herm包括三個(gè)組件:
(1)Utilities
最基礎(chǔ)的組件,提供線程、一讀一寫線程不加鎖的ring buffer、二進(jìn)制消息解析器、支持多態(tài)的對(duì)象管理器等。
(2)Socket
用面向?qū)ο蠛头盒偷姆椒ǔ橄罅薚CP/UDP的Socket IOs;抽象了Win32 Select、Linux epoll和FreeBSD kqueue的多路復(fù)用API。統(tǒng)一了三者水平模式(Level Triggered)的語義(一套代碼在Win32/Linux/FreeBSD運(yùn)行結(jié)果是一樣的),Linux上也支持了邊緣模式(Edge Triggered)。
(3)Framework
基于Utilities和Socket的簡化開發(fā)網(wǎng)絡(luò)應(yīng)用的框架,抽象出Peer和Session對(duì)象。Peer和Session對(duì)象以及Framework實(shí)現(xiàn)的功能將在第2章介紹。
Herm目前僅支持Linux/Windows/FreeBSD 32bits平臺(tái)。調(diào)用者可以基于不同的需求使用不用的組件。
1.2 最簡單的例子
本節(jié)給出兩個(gè)分別用Framework和Socket組件實(shí)現(xiàn)的簡單TCP Server的例子。所有的例子可以參考examples frameworks和multiplexors目錄。
1.2.1 用Framework實(shí)現(xiàn)TCP Server
首先,實(shí)現(xiàn)一個(gè)Listener,
class Listener : public Herm::Listener
{
virtual void Accept(Herm::Session* session)
{
// 在這里得到一個(gè)于客戶端通信的Session
// 注冊(cè)用于處理收到的消息的handler
// 用Session:: Push將數(shù)據(jù)寫到發(fā)送buffer,最終數(shù)據(jù)傳給client
}
};
實(shí)現(xiàn)一個(gè)App,
class App : public Herm::App
{
virtual bool Init()
{
// 1. 創(chuàng)建Network
Herm::Network* net = CreateNetwork();
// 2. 創(chuàng)建一個(gè)TCP Server Peer,將Listener注冊(cè)到Peer,進(jìn)行監(jiān)聽
Herm:: Peer* peer = net->CreateTCPServer(addr, new Listener);
}
};
1.2.2 用Socket實(shí)現(xiàn)TCP Server
用Socket實(shí)現(xiàn)TCP Server更靈活,但實(shí)現(xiàn)者要做一些額外的工作,比如tcp stream解析,緩沖隊(duì)列處理等等。
首先實(shí)現(xiàn)一個(gè)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;
};
實(shí)現(xiàn)StreamHandler, 處理數(shù)據(jù)收發(fā),
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;
};
最后,在一個(gè)線程里把上面Handler執(zhí)行起來,
while (true)
g_reactor->Run();
1.3 Herm地址
https://sourceforge.net/projects/speed/
1.4 下一章話題
下章將較詳細(xì)地介紹Framework組件,主要介紹如何用Framework實(shí)現(xiàn)真實(shí)可用的網(wǎng)絡(luò)游戲的接入網(wǎng)關(guān)Server(gated)和邏輯Server(zoned)。 |
|