Веб-сокет Flask отправляет сообщение конкретному клиенту

#python-3.x #sockets #flask #websocket #flask-socketio

#python-3.x #сокеты #flask #веб-сокет #flask-socketio

Вопрос:

Я использую Flask websocket. и сервер websocket запущен в порту 5000

Это три разных клиента, прослушивающих сервер websocket на основе идентификатора клиента, я хочу отправлять разные сообщения разным клиентам.

В моем примере все клиенты websockets получают все сообщения. Пожалуйста, позвольте мне, есть ли какой-либо способ на основе идентификатора клиента, я хочу отправлять разные сообщения разным клиентам.

 ws://127.0.0.1:5000/getMessage?clientId=C10
ws://127.0.0.1:5000/getMessage?clientId=C20
ws://127.0.0.1:5000/getMessage?clientId=C30

from geventwebsocket.exceptions import WebSocketError
from geventwebsocket.handler import WebSocketHandler
import gevent
from flask import Flask
from flask_sockets import Sockets
from gevent import pywsgi, Greenlet
from gevent.event import Event

if request.environ.get('wsgi.websocket'):
    ws = request.environ['wsgi.websocket']
    reqBody = request.args
    event = Event()
    ws_event.append((ws, event, None))

for ws, event, _ in ws_event:
    try:
        ws.send("Hello Message")
    except WebSocketError as e:
        event.set()
  

Ответ №1:

Одним из решений является добавление идентификатора клиента в ваши сообщения и заставить каждого клиента обрабатывать только сообщения, содержащие его идентификатор.

Например, вы можете добавлять к каждому сообщению идентификатор клиента, например, так "<clientId>:Hello Message" . Сообщение для C10 становится "C10:Hello Message" . Каждый клиент получит это сообщение, но C10 будет действовать только на нем.