使用阻塞长同步操作会暂停Node.js中的所有用户?

时间:2015-12-29 03:07:22

标签: javascript node.js asynchronous

如果我有一台使用Node.js的SMTP服务器(如haraka)或网络服务器(如Express),我必须使用无法转换为异步的同步功能会发生什么?

如果我必须以同步的方式发出HTTP请求,服务器将被挂起到所有用户,直到http请求完成或仅被挂起到当前用户/电子邮件?是否会暂停所有用户的处理?

2 个答案:

答案 0 :(得分:2)

要了解问题的答案,您确实需要了解node.js cluster module。我强烈建议您访问该SO链接并关注其中的一些链接。

如果必须执行同步操作,请注意,同步调用将阻止 处理的所有其他请求。如果您希望同时提供多个客户端/远程服务器,那么您肯定希望使用Demo烘焙到node.js来生成并发进程。

此外,如果您的同步操作速度足以影响您的QoS,那么熟悉process.nextTick并防止您的进程在等待同步时完全停顿是一个非常明智的想法操作完成。

答案 1 :(得分:0)

据我所知,同步请求并没有阻止所有用户,但在我做这样的事情之前,如果我不完全确定,我会进行一些测试。使用futures或其他库,可以发送同步请求,这确实是次优的,但如果开发人员没有权利/可能使用所有源代码,那么它可能是必要的邪恶

如果这是在客户端完成的(不是这种情况,但无论如何都要澄清),那么来自浏览器的同步请求如下所示:

funcion Foo(){
   var request = new XMLHttpRequest();
   request.open("GET", "http://server.com", false);
   request.send();
   function handleResponse(response) {
      console.log(response);
   }
   handleResponse(request.responseText);
}