1

我刚开始使用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

4

2 回答 2

3

Gevent-socketio 基于 Gevent,以及 Gevent 的 web 服务器。有两种实现:pywsgi,纯python,wsgi,使用libevent的http实现。

请参阅此处以“pywsgi.WSGIServer 和 wsgi.WSGIServer 之间的区别”开头的段落:

http://www.gevent.org/servers.html

只有那些服务器是“绿色的”,因为它们将控制权交给了 Gevent 循环......所以你只能使用那些服务器 afaik。这样做的原因是服务器在请求的最开始就存在,并且会知道如何处理“升级”和 websockets 协议协商,并且它将在下一层(SocketIO)的“环境”内传递值会期望并知道如何处理。

您还需要使用 gevent-websocket 包。因为它是绿色的(而 gevent-socketio 是基于该包的)。您不能只交换 websocket 堆栈。

希望这可以帮助。

于 2012-08-08T14:06:14.640 回答
1

CherryPy 不实现 socket.io 协议,也不支持内置 WebSocket。但是,CherryPy 有一个扩展名为ws4py,它仅在其堆栈顶部实现裸 WebSocket 协议。你可能可以从那里开始。

于 2012-08-08T07:05:41.203 回答