Python Web套接字客户端在开始接收数据时引发异常

Python Web套接字客户端在开始接收数据时引发异常,python,python-3.x,websocket,Python,Python 3.x,Websocket,我正在尝试建立与服务器的Web套接字连接,并进入接收模式。一旦客户端开始接收数据,它将立即关闭连接,出现以下异常 webSoc_Received = await websocket.recv() File "/root/envname/lib/python3.6/site-packages/websockets/protocol.py", line 319, in recv raise ConnectionClosed(self.close_code, self.close_

我正在尝试建立与服务器的Web套接字连接,并进入接收模式。一旦客户端开始接收数据,它将立即关闭连接,出现以下异常

    webSoc_Received = await websocket.recv()
  File "/root/envname/lib/python3.6/site-packages/websockets/protocol.py", line 319, in recv
    raise ConnectionClosed(self.close_code, self.close_reason)
websockets.exceptions.ConnectionClosed: WebSocket connection is closed: code = 1007, no reason.
客户端代码段:

import asyncio
import websockets

async def connect_ws():

    print("websockets.client module defines a simple WebSocket client API::::::")        
    async with websockets.client.connect(full_url,extra_headers=headers_conn1) as websocket:

        print ("starting")
        webSoc_Received = await websocket.recv()
        print ("Ending")
        Decode_data = zlib.decompress(webSoc_Received)      
        print(Decode_data)

asyncio.get_event_loop().run_until_complete(connect_ws())

有什么想法吗

您可以使用
运行直到完成()
,该过程一旦启动就完成了。
相反,您应该使用。它将保持你的插座打开,直到你关闭它
编辑
您可以这样做:

loop = asyncio.get_event_loop()
loop.call_soon(connect_ws)  # Calls connect_ws once the event loop starts
loop.run_forever()
或:

或者,如果前面的示例没有成功,您可以尝试使用以下代码:

import asyncio

@asyncio.coroutine
def periodic():
  while True:
    print("websockets.client module defines a simple WebSocket client API::::::")        
    with websockets.client.connect(full_url,extra_headers=headers_conn1) as websocket:
       print ("starting")
       webSoc_Received = websocket.recv()
       print ("Ending")
       Decode_data = zlib.decompress(webSoc_Received)      
       print(Decode_data)

def stop():
  task.cancel()

task = asyncio.Task(periodic())
loop = asyncio.get_event_loop()
loop.call_later(5, stop)

try:
   loop.run_until_complete(task)
except asyncio.CancelledError:
   pass

您可以使用
运行直到完成()
,该过程在启动流程后即完成。
相反,您应该使用。它将保持你的插座打开,直到你关闭它
编辑
您可以这样做:

loop = asyncio.get_event_loop()
loop.call_soon(connect_ws)  # Calls connect_ws once the event loop starts
loop.run_forever()
或:

或者,如果前面的示例没有成功,您可以尝试使用以下代码:

import asyncio

@asyncio.coroutine
def periodic():
  while True:
    print("websockets.client module defines a simple WebSocket client API::::::")        
    with websockets.client.connect(full_url,extra_headers=headers_conn1) as websocket:
       print ("starting")
       webSoc_Received = websocket.recv()
       print ("Ending")
       Decode_data = zlib.decompress(webSoc_Received)      
       print(Decode_data)

def stop():
  task.cancel()

task = asyncio.Task(periodic())
loop = asyncio.get_event_loop()
loop.call_later(5, stop)

try:
   loop.run_until_complete(task)
except asyncio.CancelledError:
   pass

据我所知,当前代码将在收到第一条消息后退出

尝试将代码更改为消费者模式,如websocket文档中所述:


据我所知,当前代码将在收到第一条消息后退出

尝试将代码更改为消费者模式,如websocket文档中所述:


谢谢,但它的抛出错误,因为我必须调用此函数以及asyncio.get_event_loop().run_forever(connect_ws())TypeError:run_forever()接受1个位置参数,但给出了2个。这部分有什么想法吗?使用第一个方法,它只是被卡住了,永远不会接收数据,并且停留在/usr/local/lib/python3.6/asyncio/events下面。py:127:RuntimeWarning:coroutine'connect\ws'从来没有等待过self.\u callback(*self.\u args)。对于第二个,它的相同行为实际上永远不会运行。对于第三个建议,它抛出相同的错误raise ConnectionClosed(self.close\u代码,self.close\u原因)websockets.exceptions.ConnectionClosed:WebSocket连接已关闭:code=1007,无原因。第二个示例与之相同:(@CoolNetworking,我的错。我已经为服务器端编写了代码。你能为WebSocket提供你的服务器端代码吗。我想应该是这样的,谢谢,但它的抛出错误,因为我必须调用其中的函数asyncio.get_event_loop().run_forever(connect_ws())TypeError:run_forever()接受1个位置参数,但给出了2个。对这部分有什么想法吗?对于第一个方法,它只会被卡住,永远不会接收数据,并停留在下面的/usr/local/lib/python3.6/asyncio/events.py:127:RuntimeWarning:coroutine'connect\ws'从未等待过self.\u回调(*self.\u args)。对于第二个,它的行为是相同的,它实际上永远不会运行。对于第三个建议,它抛出相同的错误raise ConnectionClosed(self.close\u code,self.close\u reason)websockets.exceptions.ConnectionClosed:WebSocket连接是关闭的:code=1007,没有原因。对于第二个示例,它是相同的:(@CoolNetworking,我的错。我已经为服务器端编写了代码。请提供您的WebSocket服务器端代码。我想应该是这样的