Flask-socketio 断开客户端
Flask-socketio disconnect a client
我正在使用 flask-socketio 创建一个聊天应用程序,现在我想在客户端断开连接时(即客户端关闭时)使用客户端的用户名向服务器发送一条消息 browser/tab 以便我可以从服务器到所有现有客户,以便他们更改他们的在线朋友列表。我用谷歌搜索了两个多小时,我接近的任何东西都是 and 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
事件。当浏览器选项卡或 window 关闭、尝试离开页面或重新加载页面时,将触发此事件。
客户端:
<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.')
使用 Flask 'request' 对象。您的服务器代码看起来像这样:
from flask import Flask, request
...
users = {} # rudimentary dict, but use your preferred user management system
@socketio.on('connect')
def connect():
users[request.sid] = User()
... # I assume some code would go here for users to set/update their display names
@socketio.on('disconnect')
def disconnect():
emit(
'user disconnected',
{'user_id': request.sid, 'message': users[request.sid].username+' disconnected'},
broadcast=True
)
我们的想法是在您的用户连接时将 sid 分配给他们,这样您就可以通过他们的 ID 访问他们的显示名称。
我正在使用 flask-socketio 创建一个聊天应用程序,现在我想在客户端断开连接时(即客户端关闭时)使用客户端的用户名向服务器发送一条消息 browser/tab 以便我可以从服务器到所有现有客户,以便他们更改他们的在线朋友列表。我用谷歌搜索了两个多小时,我接近的任何东西都是
@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
事件。当浏览器选项卡或 window 关闭、尝试离开页面或重新加载页面时,将触发此事件。
客户端:
<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.')
使用 Flask 'request' 对象。您的服务器代码看起来像这样:
from flask import Flask, request
...
users = {} # rudimentary dict, but use your preferred user management system
@socketio.on('connect')
def connect():
users[request.sid] = User()
... # I assume some code would go here for users to set/update their display names
@socketio.on('disconnect')
def disconnect():
emit(
'user disconnected',
{'user_id': request.sid, 'message': users[request.sid].username+' disconnected'},
broadcast=True
)
我们的想法是在您的用户连接时将 sid 分配给他们,这样您就可以通过他们的 ID 访问他们的显示名称。