使用python+asyncio+websockets推送=缺少消息

使用python+asyncio+websockets推送=缺少消息,python,python-3.x,websocket,python-asyncio,python-multithreading,Python,Python 3.x,Websocket,Python Asyncio,Python Multithreading,我正在尝试创建一个websocket服务器,单个客户端将在其上推送消息。我知道这不是使用websocket的常用方法,但这部分不是我的选择。为此,我将使用python 3.7和7.0 我的问题是:客户端推送的许多消息都没有被服务器接收到。 下面是我正在使用的简单代码 import asyncio import websockets async def get_tag_data(websocket, path): # print('received') data = await

我正在尝试创建一个websocket服务器,单个客户端将在其上推送消息。我知道这不是使用websocket的常用方法,但这部分不是我的选择。为此,我将使用python 3.7和7.0

我的问题是:客户端推送的许多消息都没有被服务器接收到。 下面是我正在使用的简单代码

import asyncio
import websockets


async def get_tag_data(websocket, path):
    # print('received')
    data = await websocket.recv()
    print(data)


loop = asyncio.get_event_loop()
anchors_server = websockets.serve(get_tag_data, 'localhost', 9001)
loop.run_until_complete(asyncio.gather(anchors_server))
loop.run_forever()
相反,当我尝试使用线程进行接收时,所有消息都被正确接收

据我所知,asyncio和websockets应该是用来管理的:当服务器忙于处理旧消息时发送的消息会被缓冲,并且很快就会被处理

我错过了什么?我是否需要使用asyncio线程连接websocket接收以避免丢失消息

谢谢你的回答

好的,我明白了。 我的函数只运行了一次,下一条消息没有缓冲。以下代码可解决此问题:

import asyncio
import websockets
import signal
import sys

async def get_tag_data(websocket, path):
    while True:
        async for data in websocket:
            print(data)

loop = asyncio.get_event_loop()
anchors_server = websockets.serve(get_tag_data, '', 9001)
loop.run_until_complete(asyncio.gather(anchors_server))
loop.run_forever()
注意

while True:
    async for data in websocket