Я получаю сообщение об ошибке не могу вызвать recv (), в то время как другая сопрограмма уже ждет следующего сообщения

1

Когда я запускаю свою функцию paddleLogic дважды, я получаю сообщение об ошибке "не могу вызвать recv(), в то время как другая сопрограмма уже ожидает следующего сообщения", хотя я использую await, чтобы убедиться, что они не пытаются получить одновременно.

Я запустил код без вызова функции paddleLogic во второй раз, и все работает как положено

    leftPaddlePos = await paddleLogic(websocket,leftPaddlePos)
    rightPaddlePos = await paddleLogic(opponent[websocket],rightPaddlePos)

async def paddleLogic(socket,pos):
        try:
            key = await asyncio.wait_for(socket.recv(),timeout=0.01)
            if key == "1" and pos > 0:
                pos = pos - 1
            elif key == "2" and pos < 60:
                pos = pos + 1
            time.sleep(0.003)
        except asyncio.TimeoutError:
            pos = pos
        return pos

Извините, если этот пост - беспорядок, я впервые задаю вопрос по stackoverflow. Если вам нужна дополнительная информация/код, я с радостью ее предоставлю.

Теги:
websocket

1 ответ

0

Где вы берете свои розетки?

У нас есть сопрограммы. Они запланированы ими, передавая контроль друг другу. Они уступают контроль, когда они вызывают await. Похоже, что ваш socket.recv также делает некоторое ожидание за кулисами, передавая элемент управления, поэтому recv вводится дважды, если данные из сети не доступны сразу.

Я полагаю, что вам лучше получить доступ к поддержке сокетов цикла событий asyncio. В противном случае я использовал бы select() для параллельного просмотра обоих сокетов, возвратил события вроде ('left paddle', -1) из моего асинхронного генератора и соответствующим образом обновил игровой мир.

(Я могу даже предположить, что игру в реальном времени, такую как понг, было бы проще реализовать полностью синхронно, с частотой кадров.)

  • 0
    с помощью socket.receive () мне нужно знать количество байтов полученного сообщения до его получения?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню