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

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

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

我考虑使用 libuv 或者 luv(libuv 的 Lua 绑定)来实现客户端网络库(TCP)。

在游戏主循环(主线程)的每一帧中以 UV_RUN_ONCEUV_RUN_NOWAIT 模式运行 libuv 循环。当 libuv 接收到网络数据时,它会在游戏主线程(Lua 虚拟机运行的地方)调用我的回调 Lua 函数,然后我的 Lua 代码会解密、解码和处理消息。

我的问题是:

  1. 当网络流量上升时(当然是在合理的消息大小和数量范围内),libuv 会使我的游戏主循环变得缓慢并且掉帧吗?

  2. 我是否需要将 libuv 循环放在另一个线程中,并在主线程中包装回调延迟调用我的 Lua 函数?

点赞
用户490914
用户490914

你可以使用 UV_RUN_NOWAIT,它将运行事件循环中的所有排队事件,如果没有事件,则仅返回。

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

2016-03-23 08:29:55