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

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

2. 一個單線程的Echo服務器:
unsigned short port = 7;
AsioService svc;
AsioTcpServer tcp(svc, port);
svc.callbacks().sessionStarted = &onSessionStarted;
svc.callbacks().sessionHandle = &onSession;
svc.run();
}
3. 一個多線程的Echo服務器(半異步半同步:一個主線程,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();
}
有了這樣一個思路,實現起來就很容易了。重點是以下兩點:
?。薄>彌_區的管理與內存池的使用
2。為了保證Session的線程安全,必須要設置一個掛起狀態。
還有一個好處,就是完全隔絕了asio的應用接口,不用再忍受asio漫長的編譯時間了。代碼就不貼在這里了,有興趣的可以通過email 探討。(說明,這里只提出一個思路,不再提供源代碼,請各位見諒)
原文地址: http://www.shnenglu.com/eXile/
posted on 2008-05-28 21:00 eXile 閱讀(8966) 評論(13) 編輯 收藏 引用 所屬分類: C/C++ 、網絡開發