socket.io(nodejs)发出的callback是否通过在callback完成期间阻塞服务器来影响服务器的性能?

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

在callback发生之前的这段时间里,我的意思是其他消息交换。

在第一个callback完成之前它是否会创build竞争条件或阻止其他消息发送,或者是否强制执行callback的顺序,以便说明消息1,2,3,4,5的callback总是以与消息相同的顺序到达被派出?

援助将不胜感激。

那么,这个问题涉及到一些概念 – 很难完全回答。 我会尽量不给予部分回应或见解。 如果您提供了详细信息,为什么它对您的目的很重要 – 这可能有助于更好地确定答案。

nodejs的一个优点是它是一个单线程,事件驱动的非阻塞I / O模型 – 这意味着几乎没有或者最小的阻塞(至less在理论上)。 在这里看到概念模型

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

第三,即使没有阻塞,事件也不会真正发生。 我的意思是即使A和B非常频繁地发送消息 – 他们之间有一段时间的差距 – 虽然对于人类来说是微不足道的。 这个差距甚至可以用百万分之一秒来表示。 你真的可以在一秒钟内发送超过百万条消息吗? 所以,即使callback有一些影响 – 你应该忽略它的程序的目的。 而且,即使它们同时发生,javascript也可以一次完成一件事情 – 所以最后当你收到时,你应该一次一个地做。 例如,如果要显示或提醒消息,则它们将一次一个。

至于消息的sorting,Node.js是一个单一的事件循环。 所以,我的理解是它运行一个不间断的循环,等待事件,并按事件发生的顺序发出信息。 例如了解nodejs事件循环

while(new Date().getTime() < now + 1000) { // do nothing } 

所以,为了您的目的,我会说,除非B在发送消息和接收消息的服务器之间发送消息,否则应该先收到callback。 简单的sorting是按照nodejs服务器收到的顺序进行的。 希望能帮助到你。