我对网络编程很陌生,我正在编写一个应该接受许多TCP连接并从中接收数据的程序。为了使事情并行,代理应该从新线程中的每个套接字读取数据。我决定使用boost::asio
而不是raw * nix套接字来简化操作。虽然这似乎是一个错误的决定......
我想知道我是否只调用boost::asio::read
或boost::asio::read_some
来阻止其调用线程或阻塞进程?是的我应该自己写一个小测试并看看结果,但我现在无法访问我的Linux盒子。只考虑我明天应该在大学写的代码。
因此,如果它阻止了这个过程,那么实现同时接受多个客户端的服务器/客户端架构的正确方法是什么?
备注:
答案 0 :(得分:2)
read和read_some调用都是阻塞的,只会阻塞Linux和Win32的当前线程(可能还有其他大多数,只是没有直接的经验)。
您可能希望查看使用async_read,但是如果您有大量的传入连接,因为您可能使用比连接数更少的线程来实现更好的性能。 Boost确实提供了使用线程池来处理客户端连接的示例。