Может ли libuv работать в основном цикле (мобильного) игрового клиента?

Я ищу сетевую библиотеку для работы в сети на стороне клиента мобильной игры.

В настоящее время я использую cocos2d-x с Lua для программирования на стороне клиента.

Я рассматриваю возможность использования libuv или luv (привязка Lua для libuv) в моей сетевой библиотеке на стороне клиента (TCP ).

Запуск цикла libuv в режиме UV_RUN_ONCE или UV_RUN_NOWAIT каждый кадр в основном цикле игры (главный поток). Когда libuv получает сетевые данные, она вызывает мои функции обратного вызова Lua в основном потоке игры (где работает виртуальная машина Lua), а мой код Lua расшифровывает, декодирует и обрабатывает сообщение.

Мой вопрос:

  1. сделает ли libuv мой основной цикл игры медленным и упадет мой fps, когда сетевой трафик возрастет (конечно, если в пределах разумного размера и количества сообщений)?

  2. нужно ли помещать цикл libuv в другой поток и переносить задержку обратного вызова, вызываемую моими функциями Lua, в основной поток?


person xpol    schedule 26.02.2016    source источник
comment
Честно говоря, я понятия не имею, но если это известная библиотека, я сомневаюсь, что она будет НАСТОЛЬКО плохой... Почему бы не протестировать ее самостоятельно?   -  person warspyking    schedule 26.02.2016
comment
Вы поняли это? Я также хотел бы разместить UDP-сервер в своей iOS-игре cocos2d-x (c++) и искал пример кода для этого.   -  person Rahul Iyer    schedule 03.10.2019


Ответы (1)


Да, вы можете с UV_RUN_NOWAIT, он будет запускать любое каждое событие в очереди в цикле событий с ним, и если их нет, он просто вернется.

Например, UV_RUN_ONCE будет блокироваться до тех пор, пока в очереди не появится хотя бы одно событие.

person Andrius Bentkus    schedule 23.03.2016
comment
Да, просто запустите с UV_RUN_NOWAIT где-нибудь в цикле событий - person Andrius Bentkus; 19.08.2020