2010-12-11 29 views
0

我正在使用Python的BaseHTTPRequestHandler类来构建Web服务器。我想为WebSockets添加一个端点。这意味着我需要读取处理程序的rfile中的任何内容,以便我可以逐个处理消息,因为我正在接收消息(而不必读取while输入)。我试着使用'read'的不同组合(例如,用一个大的缓冲区,如果数据较少,它会返回较早的数据;没有参数,但它只是意味着要读取直到EOF ),但无法得到这个工作。Python,BaseHTTPRequestHandler:如何从套接字读取文件中可用的内容?

我能想到的两种解决方案:

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

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

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

回答

1

WebSockets不是HTTP,所以你不能用HTTP请求处理程序来处理它们。

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