我正在使用 Express 框架开发 Node.js 应用程序,并使用集群来处理负载。在测试中,我注意到如果由于某种原因其中一个进程需要很长时间才能加载,它也会影响其他后续请求。我为此做了一个简单的测试用例:
https://gist.github.com/anonymous/7325816
使用“node app.js”运行示例并尝试http://localhost:8080/slow
在一个浏览器窗口中加载(阻塞计算需要几秒钟)并http://localhost:8080/fast
立即在另一个窗口中加载,后者也需要几秒钟才能加载。
如果我理解正确,这是因为运行计算的同一进程正在尝试处理新请求:但是如何避免这种情况呢?
编辑:
这是运行 /slow 后运行 Siege 的 HTTP 请求的输出:
HTTP/1.1 200 0.01 secs: 89 bytes ==> GET /fast
HTTP/1.1 200 6.32 secs: 89 bytes ==> GET /fast
HTTP/1.1 200 0.01 secs: 89 bytes ==> GET /fast
HTTP/1.1 200 6.84 secs: 89 bytes ==> GET /fast
HTTP/1.1 200 0.00 secs: 89 bytes ==> GET /fast
HTTP/1.1 200 7.41 secs: 89 bytes ==> GET /fast
HTTP/1.1 200 0.00 secs: 89 bytes ==> GET /fast
HTTP/1.1 200 9.04 secs: 89 bytes ==> GET /fast
编辑2:
问题在于在 OSX 上运行的 Node.js 的最新 Git 版本(v0.11.9-pre):运行当前版本 v0.10.21 它可以正常工作,而无需将请求传输到被阻止的进程。感谢@goten 的建议!