1

python_socketio 5.0.4在客户端和Flask-SocketIO 5.0.1服务器上。当客户端连接到服务器时,我想在客户端和服务器之间同步客户端的 SID。但是,当我在客户端打印 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)
4

1 回答 1

2

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

而是使用该sio.get_sid()方法获取sid. 这曾经不是问题,但是在 Socket.IO 协议的最新版本中,每个命名空间都需要有一个不同的sid,因此get_sid()应该使用该方法为您的命名空间获取正确的命名空间。

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

于 2021-02-12T14:37:07.383 回答