0

我正在使用 Python 的 BaseHTTPRequestHandler 类来构建 Web 服务器。我想为 WebSockets 添加一个端点。这意味着我需要读取处理程序的 rfile 中可用的任何内容,以便在接收消息时一一处理消息(而不必读取 while 输入)。

我尝试使用不同的“读取”组合(例如,使用大缓冲区,认为如果可用的数据较少,它会提前返回较少的数据;没有参数,但它只是意味着读取直到 EOF)但不能让这个工作。

我可以想到两个解决方案:

  • 调用 read(1): 逐个读取字节。我宁愿不这样做,因为我不确定缓冲语义是什么(例如,我不希望每个字节读取一个系统调用)。

  • 暂时使文件非阻塞,然后尝试读取数据块,然后使其阻塞,然后尝试读取 1 个字节。这似乎相当混乱。我能想到的另一个选择是只使用非阻塞套接字,但这似乎不适用于我当前的线程框架。

关于如何读取以返回任何可用数据的任何想法?

4

1 回答 1

1

WebSockets 不是 HTTP,因此您无法使用 HTTP 请求处理程序真正处理它们。

但是,将 BaseHTTPRequestHandler 与 HTTP 一起使用,您通常只会读取您期望的确切数据量(例如,在 Content-length 标头中指定。)

于 2013-02-23T03:00:42.817 回答