Python,BaseHTTPRequestHandler:如何从socket读取文件中可用的内容?

时间:2010-12-11 01:07:46

标签: python blocking websocket httpserver

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

相关问题