如何同步服务器端和客户端的socket SID?

How to synchronize socket SID on server and client?

我在客户端上有 python_socketio 5.0.4,在服务器上有 Flask-SocketIO 5.0.1。当客户端连接到服务器时,我想在客户端和服务器之间同步客户端的 SID。但是,当我在客户端上打印 SID 时,它与在服务器上打印的 SID 不同。

有什么办法可以让客户端的SID在服务器端和客户端一样吗?

这是客户端的代码:

import socketio

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

这里是服务器:

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)

问题是您在客户端中以 sio.sid 访问 sid。 Socket.IO 客户端的 sid 属性 是私有的,不应该被使用。

相反,使用sio.get_sid() 方法获取sid。这以前不是问题,但是在最新版本的Socket.IO协议中要求每个命名空间有不同的sid,所以应该使用get_sid()方法来获取正确的一个用于您的命名空间。

如果您使用的是非默认命名空间,您可以将其作为参数传递,如下所示:sio.get_sid(namespace='/my-namespace').