我想編寫一個簡單的服務器應用程序,它將從客戶端應用程序獲取命令並在單獨的線程中運行這些命令。我正在看着server class in dlib。有沒有人有使用這個經驗?它與使用Boost的Asio相比如何?C++中的簡單多線程服務器?
5
A
回答
4
Boost Asio會很容易地做到這一點。查看the examples in the Highscore tutorial,其中顯示瞭如何使用Boost進行多線程異步輸入/輸出。
#include <boost/asio.hpp>
#include <boost/thread.hpp>
#include <iostream>
void handler1(const boost::system::error_code &ec)
{
std::cout << "5 s." << std::endl;
}
void handler2(const boost::system::error_code &ec)
{
std::cout << "5 s." << std::endl;
}
boost::asio::io_service io_service;
void run()
{
io_service.run();
}
int main()
{
boost::asio::deadline_timer timer1(io_service, boost::posix_time::seconds(5));
timer1.async_wait(handler1);
boost::asio::deadline_timer timer2(io_service, boost::posix_time::seconds(5));
timer2.async_wait(handler2);
boost::thread thread1(run);
boost::thread thread2(run);
thread1.join();
thread2.join();
}
3
我會嘗試在一開始並未使用線程。我會從libevent開始。你會發現libevent模型非常簡單,並且scales out way better than spawning a thread per request model。如果libevent不能處理你的用例,總會有Erlang!
2
異步I/O比線程每客戶端模式在很多方面都要好一些。最佳性能實際上是通過每個內核線程實現的,每個線程執行異步I/O。
請注意,您的「多線程服務器」的概念雖然不完全錯誤,但與其他人使用該短語的含義截然不同。一般來說,它意味着每個連接一個線程,而不是跨線程並行化的一個連接的響應。
您要求的示例只是單線程同步服務器+並行計算的組合。
相關問題
- 1. C中的多線程TCP服務器
- 2. Python中的簡單多線程Web服務器
- 3. C++多線程服務器幫助
- 4. Windows服務的簡單線程問題
- 5. 殺多線程服務器的線程C#
- 6. TCP多線程服務器
- 7. Java服務器多線程
- 8. 多線程服務器
- 9. 簡單的C#的WebSockets服務器
- 10. 多線程服務器:SwingWorker Vs線程?
- 11. Boost中的單線程服務器
- 12. 多進程服務器或多線程服務器?
- 13. 簡單的C++ Web服務器
- 14. C#:簡單的TCP服務器問題
- 15. 簡單的C#HTTP/TCP服務器
- 16. 簡單的Web服務器C#
- 17. 最好和最簡單的多線程排隊服務建議?
- 18. C#多線程服務器。將對象傳遞給主線程
- 19. VB.net簡單的多線程
- 20. c中多線程服務器的設計
- 21. C#中的多線程服務器實現
- 22. C中多線程網絡服務器的模式#
- 23. C# - 多線程服務器中的客戶端流式傳輸
- 24. C++簡單異步服務器庫
- 25. 具有多個客戶端的簡單TCP服務器C/unix
- 26. 簡單的http服務器
- 27. 簡單的Web服務器
- 28. 簡單的Python服務器
- 29. 多線程的Java Web服務器
- 30. 帶epoll的多線程UDP服務器?
Boost.Asio非常適合這種單線對多客戶類型的工作。 – Staffan 2010-07-16 07:50:58