Python 检测客户端何时断开与Django的连接,服务器在Heroku上发送事件
Heroku关于的文档说: “如果您正在发送流式响应,例如服务器已发送 事件,您需要检测客户端何时挂断,并 确保您的应用服务器立即关闭连接。“ 我一直在Heroku上用Django中的服务器发送事件进行实验,使用。它使用一个永远循环的迭代器,从Redis发布/订阅通道读取消息并将其发送到客户端:Python 检测客户端何时断开与Django的连接,服务器在Heroku上发送事件,python,django,heroku,server-sent-events,Python,Django,Heroku,Server Sent Events,Heroku关于的文档说: “如果您正在发送流式响应,例如服务器已发送 事件,您需要检测客户端何时挂断,并 确保您的应用服务器立即关闭连接。“ 我一直在Heroku上用Django中的服务器发送事件进行实验,使用。它使用一个永远循环的迭代器,从Redis发布/订阅通道读取消息并将其发送到客户端: def iterator(self): connection = _connect() pubsub = connection.pubsub() pubsub.subscribe
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的连接。如何检测客户端何时断开连接?我在Heroku上的Scala Play2应用程序中遇到了类似的问题,该应用程序无法检测客户端在关闭()或刷新或关闭窗口时何时关闭SSE连接。启用新功能可以为我修复此问题 更新: 我请求Heroku的支持,并告诉他们我的经历。这是他们的回答 嗨,劳埃德 这是一个已知问题,新WebSocket 端点解决了这个问题。我们不打算在任何时候解决这个问题 现有端点,但我们最终将推出WebSocket 面向更广泛的受众 最好的 杰克
您确定连接不会自动关闭吗?您可以使用
redis cli
中的CLIENT LIST
命令检查django redis客户端是否仍处于连接状态。它在Heroku上没有连接(尽管在本地运行时已连接)。我第一次注意到这个问题是当我的Redis连接用完时,尽管我是唯一一个使用我的测试站点的人(免费RedisToGo计划最多有10个连接)。后来我用Redis cli
和客户端列表
确认连接确实没有自动关闭。