cherrypy作为gevent-socketio服务器

时间:2012-08-07 16:25:21

标签: python socket.io cherrypy gevent

我刚刚开始使用gevent-socketio,这太棒了!

但我一直在使用聊天教程中的默认socketioserversocketio_manage,并想知道如何将socketiocherrypy进行整合。

基本上,我该怎么做呢:

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

2 个答案:

答案 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协议。你可以从那里开始。