我使用node.js实现了聊天应用程序。程序打开与客户端的连接,当EventEmitter发出“recv”事件时,它将响应新消息。
问题是当服务器持有大约3或4个流时,响应其他请求需要很长时间。 chrome开发人员工具将请求的状态显示为待处理。到达服务器(localhost)花了超过5-30秒。我使用console.log来记录node.js
收到新请求的时间我不知道为什么会有很长时间的停顿。 Chrome浏览器,node.js或我应该知道的任何其他内容是否有任何限制?当节点同时保留太多请求时是否会延迟,我该如何测量该值?谢谢
答案 0 :(得分:3)
Chrome每个域支持六个并发连接,因此如果这些连接已在使用中,则必须等待一个关闭。如果您想知道发生了什么,请使用数据包捕获程序来检查实际的网络流量。
答案 1 :(得分:0)
浏览器仅限于适用于同一浏览器上下文的特定数量的parallel connections - 例如,当您打开时,假设超过6个选项卡,则连接将排队,您将看到它们待定。< / p>
您可以避免此限制,例如,为每个客户端连接使用唯一的轮询子域。这就是facebook解决此限制的方法,但问题出在Firefox上,这种解决方法不起作用,即使您使用唯一的子域,您的连接也会在达到限制时排队。
其他解决方案可能是使用HTML5本地存储,您可以利用StorageEvent将更改传播到同一浏览器中的其他选项卡。这就是StackOverflow聊天的方式。这种方法的优点是您只需要与服务器建立一个轮询连接,但缺点是在较旧的浏览器中缺少HTML5本地存储支持或在FF版本中不同的实现&lt; 4。