Javascript socket.io(nodejs)发出回调是否会在回调完成期间阻塞服务器,从而影响服务器性能?

Javascript socket.io(nodejs)发出回调是否会在回调完成期间阻塞服务器,从而影响服务器性能?,javascript,node.js,callback,socket.io,server,Javascript,Node.js,Callback,Socket.io,Server,假设A向B发送消息并等待回调,然后A可能发送新消息,B也向A发送许多消息 我的意思是在回调发生之前的这段时间内会发生其他消息交换 它是否创建竞争条件或阻止其他消息发送,直到第一次回调完成,还是强制执行回调顺序,以便消息1、2、3、4、5的回调始终以与消息发送相同的顺序到达 我们将不胜感激 这个问题涉及很多概念,很难完全回答。我至少会给出部分的回应或见解。 如果你提供了细节,为什么它对你的目的很重要-它可以帮助你更好地找到答案 nodejs的一个优点是它是一个单线程、事件驱动、无阻塞的I/O模型—

假设A向B发送消息并等待回调,然后A可能发送新消息,B也向A发送许多消息

我的意思是在回调发生之前的这段时间内会发生其他消息交换

它是否创建竞争条件或阻止其他消息发送,直到第一次回调完成,还是强制执行回调顺序,以便消息1、2、3、4、5的回调始终以与消息发送相同的顺序到达


我们将不胜感激

这个问题涉及很多概念,很难完全回答。我至少会给出部分的回应或见解。 如果你提供了细节,为什么它对你的目的很重要-它可以帮助你更好地找到答案

nodejs的一个优点是它是一个单线程、事件驱动、无阻塞的I/O模型——这意味着几乎没有或最小的阻塞(至少在理论上)

但是,由于传输、一致性等原因,可能会发生一些琐碎的阻塞[?]。但这不应该是一个问题,因为这将是非常微不足道的,并且在所有程序中都会发生,无论它使用什么语言。 其次是关于套接字。套接字的概念认为它可以是阻塞的,也可以是非阻塞的,这取决于您的目的。 阻塞并不一定意味着它是坏的

第三,即使没有阻碍,事件也不会同时发生。我的意思是,即使A和B非常频繁地互相发送消息——它们之间存在时间间隔——尽管对人类来说微不足道。这种差异甚至可以用百万分之一秒来表示。你真的能在一秒钟内发送超过一百万条信息吗?所以,即使回调有一些影响,为了程序的目的,也应该忽略它。而且,即使它们同时发生,javascript也可以一次做一件事——因此在接收到消息的最后,您应该一次做一件事。例如,如果要显示或提醒消息,则每次只能显示一条消息

至于消息的顺序,Node.js是一个单事件循环。因此,我的理解是,它运行一个不间断的循环,等待事件,并按照事件发生的顺序发出信息。比如说


所以,出于您的目的,我想说,除非B在发送消息的a和接收消息的服务器之间发送消息,否则您应该先接收回调。只需按照nodejs服务器接收的顺序进行排序。希望能有帮助

回调发生在本地。回调函数不会传递给服务器。但是假设A向B发送消息,那么对A的回调就是确认B收到了A的消息。它如何在本地知道消息已传递?我的理解是A发送,服务器得到它并传递给B,然后B向服务器确认,然后服务器向A发送确认。我不确定我是否正确,但我猜这就是回调的意思。(?)。是的,关于它的工作原理你是对的。谢谢你的详细回复。关心竞争条件和排序的原因是,如果许多消息堆积在一起,浏览器可能会崩溃?但我从你的解释中看到的可能是我不应该太在意它。谢谢。是的,不要太注意细节。套接字连接持续时间长,比普通通信更便宜。所以,不会像你想的那样导致浏览器崩溃。
 while(new Date().getTime() < now + 1000) { // do nothing }