我正在使用 Python 的 BaseHTTPRequestHandler 类来构建 Web 服务器。我想为 WebSockets 添加一个端点。这意味着我需要读取处理程序的 rfile 中可用的任何内容,以便在接收消息时一一处理消息(而不必读取 while 输入)。
我尝试使用不同的“读取”组合(例如,使用大缓冲区,认为如果可用的数据较少,它会提前返回较少的数据;没有参数,但它只是意味着读取直到 EOF)但不能让这个工作。
我可以想到两个解决方案:
调用 read(1): 逐个读取字节。我宁愿不这样做,因为我不确定缓冲语义是什么(例如,我不希望每个字节读取一个系统调用)。
暂时使文件非阻塞,然后尝试读取数据块,然后使其阻塞,然后尝试读取 1 个字节。这似乎相当混乱。我能想到的另一个选择是只使用非阻塞套接字,但这似乎不适用于我当前的线程框架。
关于如何读取以返回任何可用数据的任何想法?