我正在用javascript编写游戏,在服务器上编写世界/地图服务我还需要添加一个更新所有实体的命令。
让我们说实体/怪物正在移动这意味着不断更新会发送到所有连接的客户端。
如果我做的话
while(true)
sendToAllConnectedClientsNearToThisMonster(data)
items.forEach
checkIfItemHasNotExpiredYet(item)
deleteItemFromWorldIfExpired()
但与此同时,同样的服务正在处理其他内容,例如处理进出的数据包。加密解密数据包。路由数据包,将聊天数据包转发到聊天服务器......等等。
这不会阻止我的node.js服务器吗?处理此类任务的正确方法是什么?
答案 0 :(得分:1)
使用setInterval
,它每X执行一次函数(在本例中为250)毫秒。这样您就不会阻止您的服务器。由于node.js是单线程的,所以你应该始终遵循转弯定律:永远不要等待。从不阻止。并快完成!
这是包含在setInterval中的伪代码:
setInterval( function() {
sendToAllConnectedClientsNearToThisMonster(data)
items.forEach
checkIfItemHasNotExpiredYet(item)
deleteItemFromWorldIfExpired()
}, 250);
http://nodejs.org/api/timers.html#timers_setinterval_callback_delay_arg