【发布时间】:2014-12-25 14:59:04
【问题描述】:
我正在使用 Angular 和 nodejs
我在每个窗口滚动时向服务器发送获取请求
5 次请求运行良好,但 5 次请求后停止运行。
我正在使用$http.get('url')
我现在保持网址不变。
我怎样才能让它为超过 5 个请求工作?
【问题讨论】:
-
我们如何在不查看任何代码的情况下为您提供帮助?
我正在使用 Angular 和 nodejs
我在每个窗口滚动时向服务器发送获取请求
5 次请求运行良好,但 5 次请求后停止运行。
我正在使用$http.get('url')
我现在保持网址不变。
我怎样才能让它为超过 5 个请求工作?
【问题讨论】:
原因是node.js使用“http代理”来创建http连接。这个连接实现了socket连接池,默认限制num是每个主机+端口5个,http代理添加“Connection: Keep-Alive”参数时调用请求,返回的连接无法释放,所以后面的请求只能等待。
解决这个问题的三种方法
禁止HTTP代理,添加代理:调用get方法时为false。喜欢
var http = require('http'); app.get('/status.taobao', function (req, res) { http.get({host: '127.1', port: 7001, agent: false, path: '/status.taobao'}, function (res) { res.send(res.statusCode); }).on('错误', 函数 (err) { logger.error(err); res.send(404); }); });
设置 http 全局对象属性。
http.globalAgent.maxSockets = 1000;
reqeust 返回时自动关闭连接
http.get(选项,函数 (res) { }).on("socket", function (socket) { socket.emit("agentRemove"); 我推荐第一个。
【讨论】: