Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python socketio 为什么连接状态保持关闭\u等待?_Python Socketio - Fatal编程技术网

Python socketio 为什么连接状态保持关闭\u等待?

Python socketio 为什么连接状态保持关闭\u等待?,python-socketio,Python Socketio,我使用python socketio构建了一个socket.io客户端: import socketio NAMESPACE = '/bballMsg' URL = 'ws://x.x.x.x:3080?cid=1000000&puid=50000&nickName=PressureTest' class MyCustomNamespace(socketio.ClientNamespace): def on_connect(self): print(

我使用python socketio构建了一个socket.io客户端:

import socketio

NAMESPACE = '/bballMsg'
URL = 'ws://x.x.x.x:3080?cid=1000000&puid=50000&nickName=PressureTest'


class MyCustomNamespace(socketio.ClientNamespace):
    def on_connect(self):
        print(f'{self.client.sid} is connected')

    def on_connect_error(self):
        print(f'{self.client.sid} is error')

    def on_disconnect(self):
        print(f'{self.client.sid} is disconnected')

    def on_LIVE_DANMAKU_640014_438089(self, data):
        print(data)


if __name__ == '__main__':
    sio = socketio.Client(logger=True, engineio_logger=True)
    sio.register_namespace(MyCustomNamespace(NAMESPACE))
    sio.connect(URL, namespaces=[NAMESPACE])
    sio.emit('subscribe', data={'channel': 'LIVE_DANMAKU_640014_438089'}, namespace=NAMESPACE)
    sio.wait()
但我发现有两个连接,其中一个连接从已建立更改为关闭。请等待几秒钟,然后再也不会释放

COMMAND     PID     USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
python3.7 70194 xxx    5u  IPv4 0x366e9ef075952b47      0t0  TCP y.y.y.y:54183->x.x.x.x:stm_pproc (CLOSE_WAIT)
python3.7 70194 xxx    6u  IPv4 0x366e9ef08c7beb47      0t0  TCP y.y.y.y:54184->x.x.x.x:stm_pproc (ESTABLISHED)
然后我将代码重写为以下代码

import asyncio

import socketio

NAMESPACE = '/bballMsg'
URL = 'ws://x.x.x.x:3080?cid=1000000&puid=50000&nickName=PressureTest'


class MyCustomNamespace(socketio.AsyncClientNamespace):
    def on_connect(self):
        print(f'{self.client.sid} is connected')

    def on_connect_error(self):
        print(f'{self.client.sid} is error')

    def on_disconnect(self):
        print(f'{self.client.sid} is disconnected')

    def on_LIVE_DANMAKU_640014_438089(self, data):
        print(data)


loop = asyncio.get_event_loop()
sio = socketio.AsyncClient(logger=True, engineio_logger=True)
sio.register_namespace(MyCustomNamespace(NAMESPACE))


async def start_server():
    await sio.connect(URL, namespaces=[NAMESPACE])
    await sio.emit('subscribe', data={'channel': 'LIVE_DANMAKU_640014_438089'}, namespace=NAMESPACE)
    await sio.wait()


if __name__ == '__main__':
    loop.run_until_complete(start_server())

我发现只有一个连接,但出现了新问题,大部分时间在“发出”后没有收到回调。

我不确定关闭等待是否正确,但这可能是启动连接进行长时间轮询,然后将其升级到WebSocket的副作用。客户端保持HTTP会话(来自请求库)打开,以防需要重新连接,可能此会话没有关闭长轮询连接。