1

大家好,我有以下代码,但由于某种原因,我不断收到以下错误,但它似乎在同事的电脑上工作。我们似乎无法弄清楚为什么这对我不起作用。

我们还仔细检查了我们正在使用 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)
4

1 回答 1

2

Socket.IO 连接涉及客户端和服务器之间的许多交换。该connect()函数启动此过程,但这会在后台继续进行。connect当您的事件的处理程序被调用时,连接结束。这时候就可以发射了。

您的代码的问题是您没有等到连接握手完成,因此您的emit()调用发生在建立连接之前。解决方案是添加一个connect事件处理程序,并将您的emit()呼叫移到那里。

作为附加说明,我建议您在调用connect()函数之前设置事件处理程序。

于 2021-01-23T15:16:39.533 回答