4

Heroku 关于发送流响应的文档说:

“如果您正在发送流式响应,例如服务器发送的事件,您需要检测客户端何时挂断,并确保您的应用服务器及时关闭连接。”

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

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 的连接。如何检测客户端何时断开连接?

4

1 回答 1

2

我在 Heroku 上的 Scala Play2 应用程序中遇到了类似的问题,它无法检测到客户端在 close() 或刷新或关闭窗口时关闭 SSE 连接的时间。启用新的Heroku Labs websockets 功能为我解决了这个问题。

更新:

我向 Heroku 寻求支持并告诉他们我的经历。这是他们的回答。

嗨劳埃德,

这是一个已知问题,您认为新的 WebSocket 端点解决了该问题是正确的。我们不打算解决现有端点中的问题,但我们最终会将 WebSocket 端点推广给更广泛的受众。

最好的,

杰克

于 2013-11-07T02:05:38.040 回答