Heroku上的Gevent-socketio

时间:2012-09-08 10:07:23

标签: heroku socket.io gevent

我试图在heroku上使用gevent-socketio,我已经构建了应用程序,并且它可以在当地使用gunicorn。但是一旦我将它推送到heroku它就会给我服务器内部错误。我用heroku logs -tail跟踪了错误,它给了我这个错误。 https://gist.github.com/3673165

我做了一些研究,并注意到对于sockeio heroku需要一些额外的setup. 我如何使用gevent-socketio做到这一点?设置它是否可行?

我已经读过heroku不支持websockets但是支持socketio,所以我想知道它是否可行导致gevent-socketio使用gevent-websocket ......或者我错了吗?

所以,如果有人设法设置这个,请告诉我怎么做?

2 个答案:

答案 0 :(得分:0)

我不确定内部错误的原因,但是关于你的问题是“设置”:这些是你需要传递给SocketIOServer实例的2个关键字参数。

作为一个快速入侵,您可以将sgunicorn.py复制到项目目录,并修改它以传递所需的值,如:

    server = self.server_class(
        self.socket, application=self.wsgi,
        spawn=pool, handler_class=self.wsgi_handler,
        resource=self.resource, policy_server=self.policy_server,
        ## add your stuff here
        transports=['xhr-polling'], ## heroku will only support xhr-polling transport
        heartbeat_interval=10, ## client will send a heartbeat every 10 seconds
        heartbeat_timeout=15, ## server will expect said heartbeat every 15 seconds (give it time to arrive...)
        close_timeout=60, ## if client did not re-connect in 60 seconds, it will give up
    )

但是,我很遗憾地说我不认为这与你的睡眠(1.0)有任何关系。

答案 1 :(得分:0)

正如Nitzan所指出的,关键是将传输限制为“xhr-polling”并设置客户端轮询持续时间和超时的时间间隔。如果你正在使用gunicorn,Nitzan的指示应该有效。

您还需要为客户端执行此操作。特别是,请确保您在服务器端提供的轮询持续时间与客户端的轮询持续时间相匹配。< / p>