我想編寫一個簡單的服務器應用程序,它將從客戶端應用程序獲取命令並在單獨的線程中運行這些命令。我正在看着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. C++中的多線程Web服務器
- 3. C中的多線程TCP服務器
- 4. C#中的多線程TCP服務器?
- 5. Python中的簡單多線程Web服務器
- 6. C#簡單多線程
- 7. 簡單的Java線程化的TCP服務器線程
- 8. 具有多線程的C++服務器
- 9. C++中的簡單郵件服務器
- 10. C++多線程服務器幫助
- 11. 在多服務器中構建簡單的Vertx Web服務器
- 12. Windows服務的簡單線程問題
- 13. 在簡單的線程中運行服務器
- 14. 殺多線程服務器的線程C#
- 15. Linux線程C服務器
- 16. 多線程Web服務器
- 17. Java服務器多線程
- 18. 多線程服務器Java
- 19. TCP多線程服務器
- 20. 多線程服務器
- 21. 簡單的C#併發/多線程
- 22. 簡單的C#的WebSockets服務器
- 23. 多線程服務器:SwingWorker Vs線程?
- 24. 線程加入多線程服務器
- 25. python中的多線程web服務器
- 26. Java中的多線程服務器
- 27. Python中的多線程TCP服務器
- 28. C程序中的多線程TCP服務器
- 29. Boost中的單線程服務器
- 30. 多進程服務器或多線程服務器?
Boost.Asio非常適合這種單線對多客戶類型的工作。 – Staffan 2010-07-16 07:50:58