libuv可以在(移动)游戏客户端的主循环中运行吗?

时间:2016-02-26 02:36:10

标签: multithreading lua cocos2d-x libuv

我正在寻找一个用于移动游戏客户端网络的网络库。

我目前正在使用 cocos2d-x Lua 进行客户端编程。

我考虑在我的客户端网络库(TCP)中使用libuv或luv(libuv的Lua绑定)。

在游戏主循环(主线程)中的每一帧中以 UV_RUN_ONCE UV_RUN_NOWAIT 模式运行libuv循环。当libuv收到网络数据时,它在游戏主线程(Lua VM运行的地方)中调用我的回调Lua函数,并且我的Lua代码解密并解码和处理消息。

我的问题是:

  1. 当网络流量上升时(当然在合理的邮件大小和金额范围内),libuv会让我的游戏主循环变慢并丢弃我的fps吗?

  2. 我需要将libuv循环放在另一个线程中,并在主线程中包含名为my Lua函数的回调延迟吗?

1 个答案:

答案 0 :(得分:0)

是的,你可以使用UV_RUN_NOWAIT,它将在事件循环中运行任何每个排队事件,如果没有,它将只返回。

例如,

UV_RUN_ONCE会阻塞,直到队列中至少有一个事件为止。