我刚刚开始使用gevent-socketio,它太棒了!
但我一直在使用聊天教程中的默认socketioserver和socketio_manage,并想知道如何将socketio与cherrypy集成。
从本质上讲,我该如何转变这一点:
class MyNamespace(BaseNamespace):...
def application(environ, start_response):
if environ['PATH_INFO'].startswith('/socket.io'):
return socketio_manage(environ, { '/app': MyNamespace})
else:
return serve_file(environ, start_response)
def serve_file(...):...
sio_server = SocketIOServer(
('', 8080), application,
policy_server=False) sio_server.serve_forever()变成一个普通的cherrypy server
发布于 2012-08-08 22:06:15
Gevent-socketio基于Gevent和Gevent的web服务器。有两个实现: pywsgi和wsgi,前者是纯python,后者使用libevent的http实现。
请看这里以“pywsgi.WSGIServer和wsgi.WSGIServer之间的区别”开头的段落:
http://www.gevent.org/servers.html
只有这些服务器是“绿色”的,因为它们将控制权交给了Gevent循环。所以你只能使用那些服务器afaik。这样做的原因是,服务器出现在请求的最开始,它将知道如何处理“升级”和websockets协议协商,并且它将在“环境”中传递下一层(SocketIO)将期望并知道如何处理的值。
您还需要使用gevent-websocket包。因为它是绿色的(而gevent-socketio就是基于这个绿色的)。您不能只是交换websocket堆栈。
希望这能有所帮助。
发布于 2012-08-08 15:05:41
CherryPy不实现socket.io协议,也不支持将WebSocket作为内置协议。但是,CherryPy有一个名为ws4py的扩展,它只在其堆栈的顶部实现了纯WebSocket协议。你可以从那里开始。
https://stackoverflow.com/questions/11850203
复制相似问题