当我在阻塞文件描述符上需要缓冲IO时,我使用stdio.但是如果我根据手动将文件描述符转换为非阻塞模式,则stdio缓冲是不可用的.经过一些研究后,我发现BIO可用于缓冲非阻塞IO.
但可能还有其他选择吗?
我需要这样做以避免在多连接环境中使用线程.
我想你所说的是Reactor Pattern.这是一种非线性处理大量网络连接的标准方法,在多人游戏服务器引擎中非常常见.另一个实现(在python中)是扭曲矩阵.
基本算法是:
为每个套接字都有一个缓冲区
检查哪些套接字可以读取(select(),poll()或只是迭代)
对于每个套接字:
调用recv()并将内容累积到套接字的缓冲区中,直到recv返回0或EWOULDBLOCK出错
使用缓冲区的内容调用套接字的应用程序级数据处理程序
清除套接字的缓冲区