2013-05-21 42 views
1

我很新的網絡編程,我正在寫一個程序,應該接受許多TCP連接並從它們接收數據。爲了讓事情平行進行,代理應該在新線程中從每個套接字讀取數據。我決定使用boost::asio而不是原始* nix套接字來使事情更簡單。雖然這似乎是一個錯誤的決定......在線程中調用boost :: asio :: read()會調用線程或進程?

我不知道如果我打電話boost::asio::readboost::asio::read_some塊只有它的調用線程或塊進行處理?是的,我應該寫我自己的小測試並自己看結果,但我現在無法訪問我的Linux機器。考慮明天在大學時我應該寫的代碼。

因此,如果它阻止了進程,那麼實現同時接受多個客戶端的服務器/客戶端體系結構的正確方法是什麼?

注:有關設計決策

  1. 我有困難。任何建議都是適當的。

回答

2

read和read_some調用都是阻塞的,只會阻塞當前Linux和Win32的線程(也可能是大多數其他線程,只是沒有直接的經驗)。

雖然如果您有大量傳入連接,但您可能希望使用async_read來進行研究,因爲使用比連接數少的線程數可能會更好地實現更好的性能。 Boost確實提供了使用線程池來處理客戶端連接的示例。

+0

感謝您的回答。我在文檔中閱讀了「HTTP Server 3」示例。這對我的需求來說太複雜了!我將改用ZMQ。 –

相關問題