我想编写一个简单的服务器应用程序,它将从客户端应用程序获取命令并在单独的线程中运行这些命令。
我在看server class in dlib。有没有人有使用它的经验?它与使用Boost的Asio相比如何?
答案 0 :(得分: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();
}
答案 1 :(得分:3)
我会先尝试不使用线程。我会从libevent开始。你会发现libevent模型非常简单并scales out way better than spawning a thread per request model。如果libevent无法处理你的用例,总会有Erlang!
答案 2 :(得分:2)
异步I / O在很多方面比每个客户端的线程模型更好。最佳性能实际上是通过每个线程的线程实现的,每个线程都进行异步I / O.
请注意,您的“多线程服务器”概念虽然并非完全错误,但与其他人使用该词组的含义完全不同。通常,它表示每个连接一个线程,而不是对跨线程并行化的一个连接的响应。
您要求的示例只是单线程同步服务器+并行计算的组合。