我正在构建一个应用程序,它将对远程api服务器进行大约一百万次调用。我可以将连接数量限制为例如10个吗?我可以将最大套接字数设置为10吗?
我试图了解这些参数的作用:
keepAlive: false,
maxSockets: 999,
maxFreeSockets: 1
在节点http get函数中,以下代码:
var inputData = [];
for(i=1; i<=5000;i++){
inputData.push('number' + i);
}
var options = {
host: "localhost",
port: 80,
path: "/text.txt",
keepAlive: false,
maxSockets: 999,
maxFreeSockets: 1
}
var limit = inputData.length;
var counter = 0;
function fetchData(number){
return new Promise(function(resolve, reject){
var http = require('http');
fetch = function(resp){
var body = '';
resp.on('data',function(chunk){
body += chunk;
})
resp.on('end',function(){
console.log(resp)
resolve()
})
resp.on('error',function(err){
console.log('error');
})
}
var req = http.request(options, fetch);
req.end();
})
}
Promise.all(inputData.map(number => fetchData(number))).then(function(results) {
console.log('finished');
connection.end();
})
.catch(function(error) {
console.log('there wa an error');
console.log(error);
});
您确实不希望触发1,000,000个请求,并且以某种方式希望maxSockets一次将其管理到100个。有很多原因说明那不是做事情的好方法。相反,您应该使用自己的代码来将实时连接数一次管理到100。
有很多方法可以做到这一点:
编写自己的代码,该代码可以激发100,然后每次完成一个,就会激发下一个。
使用Bluebird Promise.map()
具有内置的并发功能,该功能将同时管理飞行中的飞机数量。
使用async.mapLimit()
具有内置并发功能的Async ,该功能将同时管理飞行中的飞机数量。
至于自己编写代码来做到这一点,您可以这样做。
function fetchAll() {
var start = 1;
var end = 1000000;
var concurrentMax = 100;
var concurrentCnt = 0;
var cntr = start;
return new Promise(function(resolve, reject) {
// start up requests until the max concurrent requests are going
function run() {
while (cntr < end && concurrentCnt < concurrentMax) {
++concurrentCnt;
fetchData(cntr++).then(function() {
--concurrentCnt;
run();
}, function(err) {
--concurrentCnt;
// decide what to do with error here
// to continue processing more requests, call run() here
// to stop processing more requests, call reject(err) here
});
}
if (cntr >= end && concurrentCnt === 0) {
// all requests are done here
resolve();
}
}
run();
});
}
在nodeJS应用程序中,我希望通过其UNIX套接字。我用这个包裹https://mongodb.github.io/node-mongodb-native/?jmp=docs(版本3.1.6),通过这种方式: 此处的文档中引用了URI:https://docs.mongodb.com/manual/reference/connection-string/#unix-域套接字。但在我的例子中,它失
我正在尝试发送到客户端每当一个新的连接发出。 我的服务器端javascripts是: 和要处理的客户端js: 输出未定义(在未定义的情况下) 哪里不对劲了?
我正在使用flutter socket io与运行Node/Express的服务器通信。 服务器代码: 我的扑动代码: 当我尝试连接时,我会得到一个超时错误,该错误在OnConnectRetror中捕获。 节点服务器正在运行debian,我已经检查了防火墙状态: 当我通过chrome打开url时,我得到的是“你好”信息。当我尝试netcat“NC-VZ MyServerIP8080时,我已经成功地
问题内容: 我试图理解SocketChannels和NIO。我知道如何使用常规套接字,以及如何制作一个简单的每客户端线程服务器(使用常规阻塞套接字)。 所以我的问题是: 什么是SocketChannel? 当使用SocketChannel而不是Socket时,我还能得到什么呢? 通道和缓冲区之间是什么关系? 什么是选择器? 文档中的第一句话是。那是什么意思? 我也阅读了本文档,但是不知何故…… 问
socket_read和socket_recv之间有什么区别?我正在尝试使用PHP套接字,但使用socket_read时收到了以下警告: 请帮帮我!
问题内容: 我正在使用多个聊天服务器(nodeJS)和一个Redis服务器制作聊天应用程序,这应该有助于对所有nodeJS实例进行分组。好吧,我有这个: Redis运行正常,如果我在同一服务器上有两个用户,他们可以聊天。但是,如果它们在不同的服务器上,则不能,因为套接字不在服务器之间共享。我该如何解决?我检查了关于redis上的pub / sub的信息,我敢肯定这是答案,但我没有设法实现它。 问题