socket.io异步 - 我需要锁定全局数组/变量吗?

时间:2016-05-03 12:08:56

标签: javascript node.js socket.io

一个socket.io回调(来自客户端)是否会中断当前正在执行的另一个函数?

例如 - 一个处理数组的函数,数组内容可能会因另一个客户端的结果而改变:

socket.on('user_joined', function(uid) {
    users.push(uid);
});

socket.on('user_left', function(uid) {
    users.splice(users.indexOf(uid), 1);
});

socket.on('a_random_function', function() {
    for (uid in users) {
        do something with users[uid]
    }
});

2 个答案:

答案 0 :(得分:0)

  

一个socket.io回调(来自客户端)是否会中断当前正在执行的另一个函数?

没有

事件永远不会中断函数。

事件循环将检查事件触发函数的队列,只有在它完成后才能运行。

答案 1 :(得分:0)

  

是socket.io异步

,所有NodeJS I / O都是(或应该)异步。

  

我是否需要锁定全局数组/变量?

,任何时候只有一个线程正在执行您的Javascript。事实上没有"锁定"可用的概念等同于您的想象。

也许您会发现NodeJS Event Loop Fundamendals及其答案有用。