我正在使用flask-socketio创建一个聊天应用程序,现在我想在客户端断开连接时(即,当客户端关闭浏览器/选项卡时,以客户端的用户名向服务器发送消息,以便我可以将该消息从服务器发送给所有现有客户端让他们更改其在线好友列表。我已经用Google搜索了两个多小时,而我接近的所有内容都是this和this,但对我来说不起作用。我在服务器端通过以下方式在flask-socketio文档中找到了一种方法,但我不知道哪个客户端已断开连接,因此无法更改在线好友列表。
@socketio.on('disconnect')
def test_disconnect():
print('Client disconnected')
emit('client disconnected','a client disconnected but I dont know who',broadcast = True) # i have imported emit
# but since i don't know which client disconnected i couldn't emit client name above.
所以,我认为最好像下面这样从客户端发送消息,但是在该客户端关闭浏览器后,服务器不会收到该消息:
// handle disconnect
socket.on('disconnect',()=>{
socket.emit('client disconnected',{'username':localStorage.getItem('username')})
})
我是flask-socketio的新手,我们将不胜感激。
您可以使用onbeforeunload
事件。当浏览器选项卡或窗口关闭时,尝试离开页面导航或重新加载页面,将触发此事件。
客户端:
<script>
window.onbeforeunload = function () {
socket.emit('client_disconnecting', {'username':localStorage.getItem('username')});
}
</script>
服务器端:
@socket.on('client_disconnecting')
def disconnect_details(data):
print(f'{data['username']} user disconnected.')