【发布时间】:2013-01-23 04:08:15
【问题描述】:
我有一个cherrypy api,它打算在服务器上运行很长时间。
我有一个不可靠的客户端,它可能由于我无法控制的各种原因而死掉或关闭连接。
在我的服务器 api 运行期间,我想定期检查连接状态,确保客户端仍在侦听,并在客户端离开时中止我的操作。
我找不到任何描述如何在服务cherrypy请求时轮询连接状态的好地方。
这种长期运行的一个例子是在小缓冲区(内存有限)的块中计算多个大文件(数十 GB)的 md5。
我不需要任何缩短运行时间的解决方案,因为这不是我的目标。我想尽可能长时间地保持此连接打开,但如果它关闭则中止。
这是我的代码的简单示例:
@cherrypy.expose
def foo(self):
cherrypy.response.headers['Content-Type'] = 'text/plain'
def run():
for result in get_results(): # get_results() is a heavy method mentioned
yield json.dumps(result)
return run()
foo._cp_config = {'response.stream': True}
【问题讨论】:
-
WebSockets 连接怎么样? github.com/Lawouach/WebSocket-for-Python 似乎也集成了 CherryPy (?)
-
ws4py 使用 RFC6455 定义的心跳,我不确定这是否可以在这里轻松应用。