Mam python_socketio 5.0.4 na kliencie i Flask-SocketIO 5.0.1 na serwerze. Gdy klient łączy się z serwerem, chciałbym synchronizować SID klienta między klientem a serwerem. Jednak gdy drukujeję SID na kliencie, jest inny niż SID wydrukowany na serwerze.

Czy jest jakiś sposób, aby SID z klient był taki sam na serwerze jak na kliencie?

Oto kod dla klienta:

import socketio

sio = socketio.Client()
sio.connect("http://localhost:5000")
print(sio.sid)  # czNJ6NXIAXP9-vgmAAAK
sio.emit("test_event")

A tutaj na serwerze:

from flask import Flask, request
from flask_socketio import SocketIO

app = Flask(__name__)
sio = SocketIO(app)

@sio.on("test_event")
def test_event():
    print(request.sid)  # ukJhK9ZIiXY_gTMAAAL   <---   this is different SID

sio.run(app)
0
Michal 11 luty 2021, 21:31

1 odpowiedź

Najlepsza odpowiedź

Problem polega na tym, że w kliencie masz dostęp do sid jako sio.sid. Nieruchomość sid klienta Socket.io jest prywatna, nie powinna być użyta.

Zamiast tego użyj metody sio.get_sid(), aby uzyskać sid. To nie stanowi problemu, ale w najnowszej wersji protokołu Protokołu Socket.io Każda przestrzeń nazw jest wymagana, aby mieć inny sid, więc metodę get_sid() należy użyć do uzyskania prawidłowego dla Twoja przestrzeń nazw.

Jeśli korzystałeś z domyślnej przestrzeni nazw, możesz przekazać go jako argument w następujący sposób: sio.get_sid(namespace='/my-namespace').

1
Miguel 12 luty 2021, 14:37