【问题标题】:Is socket.io asynchronous - do I need to lock global arrays/variables?socket.io 是异步的 - 我需要锁定全局数组/变量吗?
【发布时间】:2016-05-03 12:08:56
【问题描述】:

一个 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]
    }
});

【问题讨论】:

    标签: javascript node.js socket.io


    【解决方案1】:

    socket.io 是异步的

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

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

    ,任何时候只有一个线程在执行您的 Javascript。实际上,没有与您想象的等效的“锁定”概念。

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

    【讨论】:

      【解决方案2】:

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

      没有。

      函数永远不会被事件中断。

      事件循环将检查事件触发函数的队列,仅在它完成当前正在执行的操作后才运行。

      【讨论】:

        猜你喜欢
        • 2023-03-24
        • 2023-03-19
        • 1970-01-01
        • 2018-06-17
        • 1970-01-01
        • 2016-01-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多