我有一个使用bottle和gevent.wsgi实现的小型异步服务器。有一个用于实现长轮询的例程,它看起来很像bottle documentation中的“事件回调”示例:
def worker(body):
msg = msgbus.recv()
body.put(msg)
body.put(StopIteration)
@route('/poll')
def poll():
body = gevent.queue.Queue()
worker = gevent.spawn(worker, body)
return body
这里,msgbus
是一个ZMQsub
套接字。在
这一切都很好,但是如果客户端在
worker
在{
如果我不想阻止,我可以使用msgbus.poll(timeout=something)
一直在等待ipc消息,但我还是检测不到客户端
断开连接。在
我想做的是得到客户的参考
这样我就可以在某种select
或poll
循环中使用它,
或者在我的greenlet里得到一些异步通知,但是
我不知道如何用这些来完成这两件事
框架(瓶子和gevent)。在
有没有办法通知客户机断开连接?在
啊哈!至少在
gevent.wsgi
下,wsgi.input
变量有一个rfile
成员,它是一个类似文件的对象。这似乎不是WSGI spec所必需的,因此它可能无法与其他服务器一起工作。在通过这个,我可以修改我的代码,使其看起来像:
这个很好用。。。在
…除了在OpenShift上,您必须使用 alternate frontend在支持websockets的8000端口上。在
相关问题 更多 >
编程相关推荐