Я делаю сервер на основе веб-сокетов и использую рекомендации, приведенные в https://websockets.readthedocs.io/en/stable/intro.html. Когда я включаю оба обработчика, сообщения, сгенерированные производителем_обработчиком, достигают веб-клиента нормально, но никаких сообщений, отправляемых веб-клиентом, нет. получен сервером. Код никогда не возвращается из websocket.recv (). Если я отключаю (закомментирован) файл provider_handler, то сообщения, отправленные веб-клиентом, принимаются нормально. Я использую Python 3.5.3 на Raspberry Pi 3. Что я делаю не так?
import sys
import time
import asyncio
import websockets
print(sys.version)
async def consumer(message):
print(message)
async def producer():
time.sleep(2)
return "log: This is a test"
async def consumer_handler(websocket, path):
while True:
message = await websocket.recv()
print("Consumer handler message received")
await consumer(message)
async def producer_handler(websocket, path):
time.sleep(10)
while True:
message = await producer()
await websocket.send(message)
async def handler(websocket, path):
consumer_task = asyncio.ensure_future(
consumer_handler(websocket, path))
producer_task = asyncio.ensure_future(
producer_handler(websocket, path))
done, pending = await asyncio.wait(
[consumer_task, producer_task],
return_when=asyncio.FIRST_COMPLETED,
)
for task in pending:
task.cancel()
asyncio.get_event_loop().run_until_complete(
websockets.serve(handler, 'localhost', 8765))
asyncio.get_event_loop().run_forever()