gpt4 book ai didi

node.js - 多个nodejs请求实时搜索

转载 作者:太空宇宙 更新时间:2023-11-03 23:43:47 25 4
gpt4 key购买 nike

我正在编写一个域名搜索应用程序,我只是简单地检查 .com 域名的可用性。它的基础工作正常,问题是当我有多个请求,特别是多个 search() 时,它会给我一个错误

 { [Error: connect Unknown system errno 37]
code: 'Unknown system errno 37',
errno: 'Unknown system errno 37',
syscall: 'connect' }


events.js:72
throw er; // Unhandled 'error' event
^
Error: connect Unknown system errno 37
at errnoException (net.js:863:11)
at connect (net.js:726:19)
at net.js:804:9
at asyncCallback (dns.js:68:16)
at Object.onanswer [as oncomplete] (dns.js:121:9)

我需要更改或添加什么才能使其正常工作?三项赛?排队?

(针对 dc5 进行编辑)

var searches = ['test1', 'test2', 'test3'];

search(searches.shift());

function chkconnections(z) {
if (connections <= 0) {
if (searches.length >= 1) {
process.nextTick(function() {
search(searches.shift());
});
}
}
}

function search(x) {
dotCom.connect(port, host, function() {
dotCom.write('domain ' + x + '.com\r\n');
count++;
connections++;
});

dotCom.on('data', function(data) {
c++;
if (c == 2) {
dotComStatus = data.split('\n')[1];
dotCom.on('close', function() {
connections--;
chkconnections();
count--;
if (dotComStatus.indexOf("No match for domain") > -1)
{
console.log(x + ".com is available");
} else {
console.log(x + ".com is taken");
}
});
}
});
}

最佳答案

您的代码的结构方式是,您有一个套接字,并且您尝试连续四次调用它的 connect 。这就是你问题的根源。

其他问题:您正在使用尚未声明或初始化的变量。严格模式可以帮助捕获此类问题(请注意顶部的“use strict”;添加。

传回的数据是一个缓冲区 - 在对其使用字符串方法之前,您需要将其转换为字符串。

如果您重组代码,在搜索方法中移动新的 Socket 和 on('data') 逻辑,您将看到更好的结果。

类似这样的事情:

"use strict";

var port = 43;
var net = require('net');
var host = 'whois.internic.net';

search('test');
search('test1');
search('test2');
search('test3');

function search(x) {
var dotCom = new net.Socket();

dotCom.connect(port, host, function() {
dotCom.write('domain ' + x + '.com\r\n');
});

var c = 0;
var dotComStatus;

dotCom.on('data', function(data) {
c++;
if (c == 2) {
dotComStatus = data.toString().split('\n')[1];
dotCom.on('close', function() {
if (dotComStatus.indexOf("No match for domain") > -1) {
console.log("available");
} else {
console.log("taken");
}
});
}
});
}

稍作更改,按顺序搜索的逻辑仅在第一个搜索完成后才启动下一个搜索。

"use strict";

var port = 43;
var net = require('net');
var host = 'whois.internic.net';

var searches = [
"test",
"test1",
"test2",
"test3"
];


function search(x) {
var dotCom = new net.Socket();

dotCom.connect(port, host, function() {
dotCom.write('domain ' + x + '.com\r\n');
});

var c = 0;
var dotComStatus;

dotCom.on('data', function(data) {
c++;
if (c == 2) {
dotComStatus = data.toString().split('\n')[1];
dotCom.on('close', function() {
if (dotComStatus.indexOf("No match for domain") > -1) {
console.log("available");
} else {
console.log("taken");
}

if(searches.length === 0) return;

process.nextTick(function() {
search(searches.shift());
});
});
}
});
}

search(searches.shift());

如果您想为每个二级域名搜索多个 TLD,您可以执行以下操作:

var tlds = ['.net', '.com', '.org'];
var names = ['test', 'test1', 'test2'];

for(var i = 0; i < names.length; ++i) {
for(var j = 0; j < tlds.length; ++j) {
search(names[i] + tlds[j]);
}
}

并修改您的搜索函数以接受此类参数。

关于node.js - 多个nodejs请求实时搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17871230/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com