我刚刚开始使用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
?
答案 0 :(得分:3)
Gevent-socketio基于Gevent和Gevent的网络服务器。有两个实现:pywsgi,它是纯python,和wsgi,它使用libevent的http实现。
在此处查看以“pywsgi.WSGIServer与wsgi.WSGIServer之间的区别”开头的段落:
http://www.gevent.org/servers.html
只有那些服务器是“绿色”的,因为它们可以控制Gevent循环。所以你只能使用这些服务器。这样做的原因是服务器出现在请求的最开始,并且将知道如何处理“升级”和websockets协议协商,并且它将在下一层(SocketIO)的“environ”内传递值。期待并知道如何处理。
你还需要使用gevent-websocket包..因为它是绿色的(gevent-socketio是基于那个)。你不能只交换websocket堆栈。
希望这有帮助。
答案 1 :(得分:1)
CherryPy不实现socket.io协议,也不支持WebSocket作为内置。但是,CherryPy有一个名为ws4py的扩展,它在堆栈顶部只实现了裸WebSocket协议。你可以从那里开始。