检测客户端何时与Heroku上的Django和Server-Sent Events断开连接

时间:2013-03-25 09:12:45

标签: python django heroku server-sent-events

Heroku关于sending a streaming response的文档说:

  

“如果您要发送流媒体响应,例如发送服务器   事件,你需要检测客户端挂断的时间,然后制作   确保您的应用服务器立即关闭连接。 “

我一直在使用django-sse在Django中使用服务器发送事件对Heroku进行实验。它使用一个永远循环的迭代器,从Redis pub / sub通道读取消息并将它们发送到客户端:

def iterator(self):
    connection = _connect()
    pubsub = connection.pubsub()
    pubsub.subscribe(self.get_redis_channel())

    for message in pubsub.listen():
        if message['type'] == 'message':
            event, data = json.loads(message['data'])
            self.sse.add_message(event, data)
            yield

问题是如果客户端断开连接,我想打破这个循环,所以我可以关闭与Redis的连接。如何检测客户端何时断开连接?

1 个答案:

答案 0 :(得分:2)

我在Heroku上的Scala Play2应用程序遇到了类似的问题,无法检测客户端在关闭()或刷新或窗口关闭时何时关闭SSE连接。启用新的Heroku Labs websockets feature为我修复此问题。

更新:

我问Heroku支持并告诉他们我的经历。这是他们的答复。

  劳埃德,

     

这是一个已知问题,你说新的WebSocket是正确的   端点解决问题。我们不打算解决这个问题   现有的端点,但我们最终将推出WebSocket   终点给更广泛的受众。

     

最佳,

     

杰克