我有一个返回 JSON 数据的 Node.js RESTful API。其中一个 API 调用可能(并且经常这样做)需要 10 到 20 秒才能完成。这么长的 RTT 是由于连接到外部 API,如 DiffBot、MailChimp、Facebook、Twitter 等。我希望我可以缩短 API 调用,但我不能。
当然,我已经以一种很好的异步方式实现了节点代码,但问题是客户端的入站连接(到节点应用程序)在等待服务器完成时是活动的,因此可能会影响我的性能。事实上,我目前猜测这可以解释我在 node 中长时间运行的超时问题。
我已经将 maxSockets 增加到了一个巨大的数字......
require('http').globalAgent.maxSockets = 9999;
为了感兴趣,每次建立新连接时,我都会打印出活动的套接字(这里是代码)。
这给了我这样的输出:
SOCKETS: {} { 'graph.facebook.com:443': 5, 'api.instagram.com:443': 1 }
那里没有什么太有启发性的。我见过的最大连接数大约是 20 个左右,所有主机的总数。但这并没有真正告诉我有关传入连接的任何信息,或者如何优化它们,以使我的服务器在同时有许多连接时不会阻塞(我怀疑是这样)。