English 中文(简体)
Google Apps HTTP 流式传输与 Python 的问题
原标题:
  • 时间:2009-02-07 10:27:18
  •  标签:

我这里有个小问题:

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

将此翻译成中文:http://my.opera.com/WebApplications/blog/show.dml/438711#comments http://my.opera.com/WebApplications/blog/show.dml/438711#comments

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

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

"

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

最佳回答

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

输出流在内存中缓存所有输出,然后在处理程序退出时发送最终输出。Web应用程序不支持向客户端流式传输数据。

问题回答

那看起来像是一个 cgi 代码 - 我想网络服务器会缓存从 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()




相关问题
热门标签