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的连接。如何检测客户端何时断开连接?
答案 0 :(得分:2)
我在Heroku上的Scala Play2应用程序遇到了类似的问题,无法检测客户端在关闭()或刷新或窗口关闭时何时关闭SSE连接。启用新的Heroku Labs websockets feature为我修复此问题。
更新:
我问Heroku支持并告诉他们我的经历。这是他们的答复。
劳埃德,这是一个已知问题,你说新的WebSocket是正确的 端点解决问题。我们不打算解决这个问题 现有的端点,但我们最终将推出WebSocket 终点给更广泛的受众。
最佳,
杰克