gpt4 book ai didi

python - 使用 python flask socketio 向除发件人之外的所有连接的客户端广播

转载 作者:太空狗 更新时间:2023-10-30 00:06:46 25 4
gpt4 key购买 nike

我正在关注 Alex Hadik 的 Flask Socketio 教程,该教程构建了一个非常简单的 Flask 聊天应用程序。

http://www.alexhadik.com/blog/2015/1/29/using-socketio-with-python-and-flask-on-heroku

我想向除发件人以外的所有连接用户广播一条消息。我已经完成了 flasksocketio init.py,但我仍然不确定如何执行此操作。

这是服务器代码。

from flask import Flask, render_template,request
from flask.ext.socketio import SocketIO,emit,send
import json,sys

app = Flask(__name__)
socketio = SocketIO(app)
clients = {}
@app.route("/")
def index():
return render_template('index.html',)

@socketio.on('send_message')
def handle_source(json_data):
text = json_data['message'].encode('ascii', 'ignore')
current_client = request.namespace
current_client_id = request.namespace.socket.sessid
update_client_list(current_client,current_client_id)
if clients.keys():
for client in clients.keys():
if not current_client_id in client:
clients[client].socketio.emit('echo', {'echo': 'Server Says: '+text})

def update_client_list(current_client,current_client_id):
if not current_client_id in clients: clients[current_client_id] = current_client
return

if __name__ == "__main__":
socketio.run(app,debug = False)

它目前只是向所有连接的客户端广播。我创建了一个连接的客户端 dict (clients),它存储由客户端 id 索引的 request.namespace。为除发送客户端之外的所有客户端调用 clients[client].socketio.emit() 仍然会导致消息被广播给调用用户。

有没有人对我如何向除发件人以外的所有连接用户广播消息有任何想法?

最佳答案

您不必保存用户 ID 和管理个人发射,您可以使用 emit('my_event', {data:my_data}, broadcast=True, include_self=False)。在您的情况下,它将是这样的:

@socketio.on('send_message')
def handle_source(json_data):
text = json_data['message'].encode('ascii', 'ignore')
emit('echo', {'echo': 'Server Says: '+text}, broadcast=True, include_self=False)

如果您必须为特定的客户组发送消息,您可以创建 rooms然后使用 emit('my_event', {data:my_data}, room=my_room, include_self=False) 向加入 my_room 的客户发送消息。您可以查看 flask_socketio.emit 的引用资料了解更多详情。

关于python - 使用 python flask socketio 向除发件人之外的所有连接的客户端广播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29266594/

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