【发布时间】:2012-12-14 18:35:27
【问题描述】:
我正在使用频道 api(java 后端 - javascript 前端)构建一个聊天应用程序。每次用户获得用户名时,它都会在剩余用户屏幕中列出。新用户从频道发送给每个用户,并将被显示。但如果他们关闭窗口,我想从列表中删除用户。我真的想知道如何识别用户是否使用频道 api 关闭了他的窗口?
【问题讨论】:
标签: java javascript google-app-engine sockets channel
我正在使用频道 api(java 后端 - javascript 前端)构建一个聊天应用程序。每次用户获得用户名时,它都会在剩余用户屏幕中列出。新用户从频道发送给每个用户,并将被显示。但如果他们关闭窗口,我想从列表中删除用户。我真的想知道如何识别用户是否使用频道 api 关闭了他的窗口?
【问题讨论】:
标签: java javascript google-app-engine sockets channel
需要直接执行此操作的不是通道 API;在 JavaScript 中,您可以使用 onunload 来确定用户何时离开页面,然后像往常一样触发通道 API。但是,不能保证它会被调用(想想如果我硬关闭我的机器会发生什么)。您可以使用 JavaScript 提供心跳并在服务器上实现逻辑来表示“如果我在 X 秒/分钟/无论如何都没有收到来自客户端的任何消息,则认为该用户的会话已关闭。”
【讨论】:
我在 python 上做同样的事情。您需要做的就是启用presence 入站服务,然后只要客户端断开连接,您就会在/_ah/channel/disconnected/ 上接收请求。从请求参数中,您可以确定客户是谁并发送从应用程序的用户列表中删除他(如果存在)和(如果有必要)向剩余的客户端发送一条频道消息,以将他从他们看到的列表中删除
【讨论】: