当您有一个带有多个 nodejs 应用程序的网络服务器时,您所做的典型事情就是在它们前面添加一些反向代理并编写规则。Nginx 目前是最受欢迎的,因为它速度很快,所以我将重点介绍它,但这个问题也可以应用于其他网络服务器。
今天让我感到震惊的是,这听起来有点低效。毕竟,同一个 HTTP 请求需要解析两次——首先是代理,然后是 nodejs。而且协议本身也是基于文本的,在解析器中有很多边缘情况……难道不能让 webserver 和 nodejs 之间的耦合更高效,从而只需要解析一次请求吗?
我的第一个想法是关于 fastcgi,但事实证明这只会让事情变得更糟,因为它限制 nodejs 一次只能处理一个请求。无论如何,它已经过时了。
然后我又挖了一点,发现SCGI看起来更好,甚至得到了 nginx 的支持……但似乎不是在 NodeJs 方面。
最后我找到了Apache JServ 协议,但据我所知,nginx 和 nodejs 都不支持它,但支持更差。
为什么是这样?我知道与典型请求中发生的所有其他事情相比,这种开销可能很小,但它真的如此微不足道,甚至不值得付出任何努力吗?即使是很小的收益也可以加起来,并且很容易有一个简单的包用最少的工作量来替换 Nodehttp.Server
的scgi.Server
。