Python socketio 为什么连接状态保持关闭\u等待?
我使用python socketio构建了一个socket.io客户端: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(
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会话(来自请求库)打开,以防需要重新连接,可能此会话没有关闭长轮询连接。