gpt4 book ai didi

python - 如何通知 Python/Tornado 客户端已关闭选项卡/浏览器?

转载 作者:太空宇宙 更新时间:2023-11-03 12:09:22 25 4
gpt4 key购买 nike

我一直在寻找有关此问题的解决方案很长一段时间,但没有骰子。

编辑:我没有指出我正在尝试制作聊天服务器。所以人们登录后,他们的 id 被附加到 users和一个 listeners列表。他们开始聊天。但是,当其中一个尝试关闭选项卡或浏览器时,用户永远不会从两个列表中删除,因此他/她保持登录状态。

Edit2:我觉得上面的编号有点困惑,所以我把这个部分也贴在了脚本的底部。

到目前为止,我已经尝试过 on_connection_close() 函数(它永远不会被解雇,我不知道为什么),on_finish()函数(每次调用 finish() 时都会被触发),因此这也不符合要求。

现在我想出了一个解决方案,其中涉及 on_finish()功能:

  • 每当UpdateHandler类(class)'post()然后调用函数 self.done = 0设置。
  • 就在 finish() 之前函数被触发我设置 self.done = 1 .
  • 现在on_finish()函数被调用,我打印 self.done在控制台上,它是 1。
  • 同在on_finish()函数我做了一个 IF self.done = 1语句,正如预期的那样返回 TRUE和 Tornado 的 io_loop.add_timeout带参数time.time()+3 (以便它休眠 3 秒以确保用户导航到网站内的另一个页面或完全离开网站)以及最终将被调用的回调。
  • 3 秒后我想检查是否 self.done仍然等于 1 或者如果用户仍在网站上,那么肯定是 0。

  • 顺便说一句,服务器每 30 秒完成一次连接,然后向用户发送通知以启动新连接,这样连接就不会自行超时。
    当客户端关闭浏览器并且 30 秒长超时到期时,服务器尝试发送通知,如果客户端仍在我的网站上,则它会启动一个新连接,从而调用 post()我上面提到的 UpdateHandler 类中的函数因此设置了变量 self.done回到 0。(这就是我给 io_loop.add_timeout 3 秒的余量的原因。)

    既然这已经解决了,我想继续尝试看看它是如何工作的。
    我启动了服务器并打开浏览器导航到正确的 url 并观察服务器如何响应(通过在脚本中放置一些 print 语句)。当用户保持连接时,我可以看到在 post() 调用(当时显示 self.done = 0 )之后它休眠了 3 秒,然后回调函数被调用,但是这个函数打印了 self.done = 1这很奇怪。

    我知道这不是最有效的方法,但它是我能想出的唯一解决方案,它甚至没有按预期工作。

    结论:

    我希望有人有一个很好的选择,或者甚至我的理论中我错过的一点打破了整个事情。
    我真的很想知道如何让 Tornado 知道客户端关闭了浏览器而不等待 30 秒超时完成。
    也许与 ping 打开的连接或其他东西。我查看了 TORNADIO有一点,但不太喜欢它。如果可能的话,我想在纯 Tornado 中执行此操作。

    我会尽快提交代码,我已经尝试了大约半个小时查看“如何格式化”等,但是当我尝试提交我的编辑时出现错误。
  • 您的帖子似乎包含格式不正确的代码
    代码。请使用代码工具栏将所有代码缩进 4 个空格
    按钮或 CTRL+K 键盘快捷键。如需更多编辑帮助,请单击
    [?] 工具栏图标。
  • 最佳答案

    我已经有这个问题大约 5 到 6 天了,终于找到了问题所在,嗯.. 不完全是,但它已经解决了!我一直在互联网上搜索,但一无所获。我在上面的帖子中说过,我确实记得几个月前我尝试相同的脚本时它可以工作,但我从未提到使用 nginx那时候。我一直在为 Apache + mod_proxy 苦苦挣扎,但我不知道 apache 有什么问题但是当我尝试时 nginx这次又成功了!

    如果你有同样的问题(on_connection_close 没有被解雇)“TRY”nginx .也感谢您的帮助@Nikolay。

    关于python - 如何通知 Python/Tornado 客户端已关闭选项卡/浏览器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12467204/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com