1

我对网络编程很陌生,我正在编写一个应该接受许多 TCP 连接并从它们接收数据的程序。为了使事情并行,代理应该从新线程中的每个套接字读取数据。我决定使用boost::asio而不是原始的 *nix 套接字来使事情变得更简单。虽然这似乎是一个错误的决定……

我想知道我是否只调用boost::asio::readboost::asio::read_some阻塞它的调用线程或阻塞进程?是的,我应该编写自己的小测试并自己查看结果,但我现在无法访问我的 Linux 机器。只是在想我明天应该在大学写的代码。

因此,如果它阻止了该过程,那么实现同时接受多个客户端的服务器/客户端架构的正确方法是什么?

笔记:

  1. 我在设计决策方面遇到困难。任何建议都是合适的。
4

1 回答 1

2

read 和 read_some 调用都是阻塞的,只会阻塞 Linux 和 Win32 的当前线程(可能还有其他大多数,只是没有直接的经验)。

如果您有大量传入连接,您可能希望考虑使用 async_read ,因为实际上您可能会使用比连接数更少的线程数来获得更好的性能。Boost 确实提供了使用线程池处理客户端连接的示例。

于 2013-05-21T20:22:32.760 回答