当前位置: 首页 > 知识库问答 >
问题:

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

别烨熠
2023-03-14

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

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

我一直在Heroku上使用Django sse在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的连接。如何检测客户端何时断开连接?

共有1个答案

阎阳
2023-03-14

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

更新:

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

嗨Lloyd

这是一个已知问题,新的WebSocketendpoint修复了该问题,您是正确的。我们不打算解决现有endpoint中的问题,但我们最终将向更广泛的受众推出WebSocketendpoint。

最好的

杰克

 类似资料:
  • 我正在用Java编写一个简单的TCP客户机/服务器程序对,如果客户机在10秒内还没有发送任何东西,服务器必须断开连接。socket.setsoTimeout()使我得到了这一点,服务器就可以很好地断开连接。问题是--我如何让客户端确定服务器是否关闭?目前,我使用DataOutputStream向服务器写入数据,这里的一些答案表明,向封闭套接字写入数据将引发IOException,但这不会发生。 编

  • 我正在制作满足以下条件的Netty服务器: null 在我的情况下,既没有发生“通道不活动”事件,也没有发生“连接被对等方重置”异常。 这是我使用的Netty测试客户端代码的部分。 如何在要回复时注意到断开连接?

  • 当我再次调用时,第二次调用将按预期返回。但我想明白,为什么第一次打电话成功了?我是否遗漏了某些特定于TCP的细节?这种奇怪的(对我来说)行为只针对{活动,错误}连接。

  • 我有一个使用SSE向附加客户端发送更新的node.js服务器。偶尔,我会收到服务器错误H27。与此同时,其他客户端请求可能会在客户端重新注册到SSE事件服务时丢失。 客户端获取/事件请求与服务器H27错误之间的时间介于13秒到19:35分钟之间(在遇到的30次不同事件中)。但GET/事件请求的定时与相应的H27错误之间存在完全的相关性。我每50秒从服务器发送一条keep-alive消息,以绕过He

  • 我正在开发一个与许多客户端连接的服务器。我需要知道客户端何时与服务器断开连接。因此,每个客户端都向服务器发送一个特定的字符。如果两秒钟后没有收到字符,那么我应该断开服务器与客户端的连接(释放为此客户端分配的资源)。 这是我的服务器的主要代码: 第一个问题是,我用来识别在线客户端的方式(每秒发送特定消息)是否是一种好方法? 如果它是好的,我如何使用检测与女巫客户端相关,然后如何断开密钥与服务器的连接

  • 我正在使用此示例的代码创建我的GRPC异步服务器: 因为我做了一项研究,在那里我发现我必须实现KeepAlive(https://grpc.github.io/grpc/cpp/md_doc_keepalive.html)我添加了以下几行: 到目前为止一切都很好,服务器工作正常,通信畅通。但是,我如何检测到客户端已断开连接?我为所谓的方法添加的行似乎不适合我。 我的错误在哪里?当客户端因任何原因断