0

我这里有个小问题:

前段时间我使用 PHP 代码实现了 HTTP 流,类似于此页面上的内容:

http://my.opera.com/WebApplications/blog/show.dml/438711#comments

我用非常相似的解决方案获得数据。现在我尝试使用此页面中的第二个代码(在 Python 中),但无论我做什么,在一切完成后,我都会从 python 服务器收到 responseText。下面是一些python代码:

print "Content-Type: application/x-www-form-urlencoded\n\n"

i=1
while i<4:
 print("Event: server-time<br>")
 print("data: %f<br>" % (time.time(),))
 sys.stdout.flush()
 i=i+1
 time.sleep(1)

这是Javascript代码:

ask = new XMLHttpRequest();
ask.open("GET","/Chat",true);
setInterval(function()
{
if (ask.responseText) document.write(ask.responseText);
},200);
ask.send(null);

有人知道我做错了什么吗?我怎样才能一个接一个地收到那些该死的消息,而不仅仅是在while循环结束时收到所有消息?感谢您在这里的任何帮助!

编辑:

我忘记添加的主要内容:服务器是谷歌应用服务器(我不确定谷歌自己的实现),这是一个带有一些解释的链接(我认为嗯):

http://code.google.com/intl/pl-PL/appengine/docs/python/gettingstarted/devenvironment.html http://code.google.com/intl/pl-PL/appengine/docs/whatisgoogleappengine.html

4

2 回答 2

3

它极有可能是 App Engine 缓冲输出。快速搜索发现: http ://code.google.com/appengine/docs/python/tools/webapp/buildingtheresponse.html

输出流缓冲内存中的所有输出,然后在处理程序退出时发送最终输出。webapp 不支持将数据流式传输到客户端。

于 2009-02-07T18:40:55.163 回答
1

这看起来像一个 cgi 代码——我想 Web 服务器缓冲来自 cgi 处理程序的响应。因此,选择正确的工具并进行正确的配置实际上是一个问题。

我建议使用 wsgi 服务器并利用 wsgi 的流式支持。

这是您转换为 wsgi 应用程序的示例代码:

def app(environ, start_response):
    start_response('200 OK', [('Content-type','application/x-www-form-urlencoded')])
    i=1
    while i<4:
        yield "Event: server-time<br>"
        yield "data: %f<br>" % (time.time(),)
        i=i+1
        time.sleep(1)

有很多 wsgi 服务器,但这里有一个来自 python std lib 的参考示例:

from wsgiref.simple_server import make_server

httpd = make_server('', 8000, app)
httpd.serve_forever()
于 2009-02-07T17:10:36.720 回答