问题描述
大家好,我有以下代码,但由于某种原因,我不断收到以下错误,但它似乎可以在同事的电脑上运行。我们似乎无法弄清楚为什么这对我的不起作用。
我们还仔细检查了我们是否使用 dir() 导入了相同的 socketio
我已经尝试在 sio.connect 和 sio.emit 中指定命名空间,但仍然没有运气!
socketio.exceptions.BadNamespaceError: / is not a connected namespace.
bearerToken = 'REDACT'
core = 'REDACT'
output = 'REDACT'
import socketio
import json
def getListeners(token,coreUrl,outputId):
sio = socketio.Client(reconnection_attempts=5,request_timeout=5)
sio.connect(url=coreUrl,transports='websocket')
@sio.on('mwedge:batch:stats')
def batchStats(data):
if (outputId in data['outputStats']):
listeners = data['outputStats'][outputId][16]
print("Number of listeners ",len(listeners))
ips = []
for listener in listeners:
ips.append(listener[1])
print("Ips",ips)
def authCallback(data):
print(json.dumps(data))
sio.emit(event='auth',data={
'token': token
},callback=authCallback)
getListeners(bearerToken,core,output)
解决方法
Socket.IO 连接涉及客户端和服务器之间的许多交换。 connect()
函数会启动此过程,但这会在后台继续进行。当您的 connect
事件的处理程序被调用时,连接结束。此时就可以发出了。
您的代码的问题在于您没有等到连接握手完成,因此您的 emit()
调用在建立连接之前发生。解决方案是添加一个 connect
事件处理程序,并将您的 emit()
调用移到那里。
另外,我建议您在调用 connect()
函数之前设置事件处理程序。