我正在为现有的桌面应用程序开发Web界面。我一直在寻找一种方法来让服务器将内容推送到浏览器并最终到达Comet。
通过互联网浏览,以及大多数问题,我得到了扭曲,轨道,龙卷风等答案,其中大多数甚至指向Jetty或StreamHub等Java应用程序。
在这方面没有太深入,我想知道是否有机会使用像BaseHTTPServer这样的标准lib模块来实现类似Comet的通信,并保持尽可能简单,因为我不需要那么多的功能和效率。
注意:Jython是一种可能性,但我希望尽可能减少它的要求。
答案 0 :(得分:4)
正如gs所说,只需保持连接打开。
这是一个示例WSGI应用程序,它每秒向客户端发送当前时间:
import time
def application(environ, start_response):
start_response('200 OK', [('content-type', 'text/plain')])
while True:
time.sleep(1.0)
yield time.ctime() + '\n'
if __name__ == '__main__':
from wsgiref.simple_server import make_server
print "Serving on http://localhost:4000..."
make_server('localhost', 4000, application).serve_forever()
如果我在浏览器中找到该网址,我会看到:
Mon Oct 05 12:21:26 2009
Mon Oct 05 12:21:27 2009
Mon Oct 05 12:21:28 2009
Mon Oct 05 12:21:29 2009
Mon Oct 05 12:21:30 2009
(...a new line appears every second...)
这种方法的问题在于你不能同时保持很多这样的连接。实际上,wsgiref
服务器是单线程的,因此您只能在任何时候打开一个连接。如果这是一个问题,那么你必须使用多线程(例如CherryPy)或非阻塞服务器(例如Twisted,Tornado等)。
答案 1 :(得分:0)
这是可能的。只是不要关闭与客户端的连接。
答案 2 :(得分:0)
扩展了理论所说的内容,如果你想使用彗星在客户端之间传递消息,那么你需要实现像pubsub这样的东西。
对于pubsub使用龙卷风之类的东西要比单线程wsgiref服务器简单得多。