Javascript 如何同步执行socket.io端点

Javascript 如何同步执行socket.io端点,javascript,node.js,sockets,asynchronous,socket.io,Javascript,Node.js,Sockets,Asynchronous,Socket.io,我的应用程序正在使用socket.io,根据我收集的信息,socket.io异步执行。大多数情况下这不是问题,但是有一种特殊情况,我的应用程序中的两个用户可能会同时调用同一个套接字端点,这会导致问题 我宁愿让每个套接字端点等到它完成执行之前,再执行。如果它们异步运行,我会得到意想不到的结果 在服务器上,我有以下内容 // Establish a connection with a WebSocket. io.on("connection", socket => { socket.on

我的应用程序正在使用socket.io,根据我收集的信息,socket.io异步执行。大多数情况下这不是问题,但是有一种特殊情况,我的应用程序中的两个用户可能会同时调用同一个套接字端点,这会导致问题

我宁愿让每个套接字端点等到它完成执行之前,再执行。如果它们异步运行,我会得到意想不到的结果

在服务器上,我有以下内容

// Establish a connection with a WebSocket.
io.on("connection", socket => {

  socket.on("add_song", async (data) => {
    PlaylistHandler.add_song(io, socket, data);      
  });

...
...
add_song
同时被两个不同的
io
连接(两个不同的用户)调用。我不希望playlyHandler.add_song函数为每个函数并行运行,所以我尝试使用async/await

这没有解决任何问题,因为我怀疑这是因为有两个不同的
io
连接在进行呼叫


有没有办法让套接字调用本身按顺序运行而不是并行运行?

await
不会阻塞事件循环,因此在这里它确实无关紧要。两个
等待播放处理程序.add_song
将在各自的
io.on
侦听器中并行执行

最好/最简单的方法是在
add_song
的开头设置一个变量
computing=true
,如果我们已经在做
add_song
,则推迟任何
add_song

希望此片段能激励您实现可行的解决方案:

let calculating = false;

function add_song(io, socket, data){
    if(calculating){
        setTimeout(function(){
            add_song(io, socket, data)
        }, 500); //depends on how often you want to check, reduce/increase timeout depending on how time-sensitive checking should be       
        return;
    }
    calculating = true;

    //Do all your usual add_song processing

    //After final operation of add_song
    calculating = false;
}
let calculating = false;

function add_song(io, socket, data){
    if(calculating){
        setTimeout(function(){
            add_song(io, socket, data)
        }, 500); //depends on how often you want to check, reduce/increase timeout depending on how time-sensitive checking should be       
        return;
    }
    calculating = true;

    //Do all your usual add_song processing

    //After final operation of add_song
    calculating = false;
}