CherryPy的作为GEVENT,socketio服务器(cherrypy as a gevent

2019-10-17 03:08发布

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

Answer 1:

GEVENT-socketio是基于GEVENT和GEVENT的Web服务器。 有两种实现方式:pywsgi,这是纯粹的Python和WSGI,它使用了libevent的HTTP实现。

见开始在这里“pywsgi.WSGIServer和wsgi.WSGIServer之间的区别”的段落:

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

只有那些服务器是“绿色”,在这个意义上,他们得到控制的GEVENT环..所以你只能使用这些服务器AFAIK。 这样做的原因是服务器出现在请求开始,并会知道如何处理“升级”和WebSockets的议定书的谈判,它将通过“ENVIRON”内值下一层(SocketIO)将期待并知道如何处理。

您还需要使用GEVENT-WebSocket的包..因为它是绿色的(和GEVENT-socketio是基于一个)。 你不能只是换WebSocket的堆栈。

希望这可以帮助。



Answer 2:

CherryPy的没有实现socket.io协议,也不支持WebSocket的一个内置。 然而,有一个扩展的CherryPy,称为ws4py ,即在它的栈的顶部仅实现裸WebSocket协议。 你也许可以从那里开始。



文章来源: cherrypy as a gevent-socketio server