利用boost::asio實現(xiàn)一個簡單的服務(wù)器框架
受到 SP Server 框架的影響,我使用asio大致實現(xiàn)了一個多線程的半異步半同步服務(wù)器框架,以下是利用它來實現(xiàn)一個Echo服務(wù)器:
1. 實現(xiàn)回調(diào):
request->setReadMode(Session::READ_LN); // 設(shè)置為行讀取
}

static void onSession(RequestPtr const& request, ResponsePtr const& response) {
print(request->message()); //打印收到的消息
response->addReply(request->message()); //回送消息
response->close();
}

2. 一個單線程的Echo服務(wù)器:
unsigned short port = 7;
AsioService svc;
AsioTcpServer tcp(svc, port);
svc.callbacks().sessionStarted = &onSessionStarted;
svc.callbacks().sessionHandle = &onSession;
svc.run();
}
3. 一個多線程的Echo服務(wù)器(半異步半同步:一個主線程,4個工作者線程)
unsigned short port = 7;
int num_threads = 4;
AsioService svc;
AsioService worker(AsioService::HAS_WORK);
AsioTcpServer tcp(svc, port);
svc.callbacks().sessionStarted = worker.wrap(&onSessionStarted);
svc.callbacks().sessionHandle = worker.wrap(&onSession);
AsioThreadPool thr(worker, num_threads);
svc.run();
}
有了這樣一個思路,實現(xiàn)起來就很容易了。重點是以下兩點:
1。緩沖區(qū)的管理與內(nèi)存池的使用
2。為了保證Session的線程安全,必須要設(shè)置一個掛起狀態(tài)。
還有一個好處,就是完全隔絕了asio的應(yīng)用接口,不用再忍受asio漫長的編譯時間了。代碼就不貼在這里了,有興趣的可以通過email 探討。(說明,這里只提出一個思路,不再提供源代碼,請各位見諒)
原文地址: http://www.shnenglu.com/eXile/
posted on 2008-05-28 21:00 eXile 閱讀(8967) 評論(13) 編輯 收藏 引用 所屬分類: C/C++ 、網(wǎng)絡(luò)開發(fā)