【发布时间】:2018-05-12 03:29:01
【问题描述】:
我正在开发一个应用程序,以便在创建套接字后以侦听器和调用者模式启动多个流。现在,如果我启动一个流,进程就会挂起,因为流正在等待数据。所以我很清楚,我需要以异步方式启动流,以便应用程序的其余部分继续工作。
我是否在以下位置开始直播:
- 单独的线程
- 使用 fork 分离进程
- 还阅读了有关 select 的内容,这会起作用吗
- 阻塞/非阻塞套接字能解决这个问题吗?
这个应用程序是用 C++ 完成的。
【问题讨论】:
我正在开发一个应用程序,以便在创建套接字后以侦听器和调用者模式启动多个流。现在,如果我启动一个流,进程就会挂起,因为流正在等待数据。所以我很清楚,我需要以异步方式启动流,以便应用程序的其余部分继续工作。
我是否在以下位置开始直播:
这个应用程序是用 C++ 完成的。
【问题讨论】:
您可以使用 Boost.Asio 之类的库或 C 函数 poll()(或基本相同的 select())同时等待多个套接字。无论哪种方式,您都希望“多路复用”套接字,这意味着您阻塞直到其中任何一个有可用数据,然后您从那个套接字读取。这就是构建的网络应用程序的数量,通常比为每个连接都有一个线程或进程更高效、更可扩展且更不容易出错。
【讨论】:
EAGAIN) 如果套接字是非阻塞的,则不是错误。只需轮询直到有可用数据,不要从未标记为就绪的套接字中读取。