【发布时间】:2013-03-25 09:12:45
【问题描述】:
Heroku 关于sending a streaming response 的文档说:
"如果您正在发送流式响应,例如使用 server-sent 事件,您需要检测客户端何时挂断,并制作 确保您的应用服务器立即关闭连接。 "
我一直在使用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 的连接。如何检测客户端何时断开连接?
【问题讨论】:
-
您确定连接不会自动关闭吗?可以使用
redis-cli中的CLIENT LIST命令来检查django redis客户端是否还在连接。 -
Heroku 上没有(虽然我在本地运行时有)。当我用完 Redis 连接时,我第一次注意到这个问题,尽管我是唯一一个使用我的测试站点的人(免费的 RedisToGo 计划最多有 10 个连接。)后来我通过
redis-cli和CLIENT LIST确认确实连接没有自动关闭。
标签: python django heroku server-sent-events