Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 检测客户端何时断开与Django的连接,服务器在Heroku上发送事件_Python_Django_Heroku_Server Sent Events - Fatal编程技术网

Python 检测客户端何时断开与Django的连接,服务器在Heroku上发送事件

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

Heroku关于的文档说:

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

我一直在Heroku上用Django中的服务器发送事件进行实验,使用。它使用一个永远循环的迭代器,从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的连接。如何检测客户端何时断开连接?

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

更新:

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

嗨,劳埃德

这是一个已知问题,新WebSocket 端点解决了这个问题。我们不打算在任何时候解决这个问题 现有端点,但我们最终将推出WebSocket 面向更广泛的受众

最好的

杰克


您确定连接不会自动关闭吗?您可以使用
redis cli
中的
CLIENT LIST
命令检查django redis客户端是否仍处于连接状态。它在Heroku上没有连接(尽管在本地运行时已连接)。我第一次注意到这个问题是当我的Redis连接用完时,尽管我是唯一一个使用我的测试站点的人(免费RedisToGo计划最多有10个连接)。后来我用
Redis cli
客户端列表
确认连接确实没有自动关闭。