gpt4 book ai didi

node.js - 测试套接字是否打开并正在监听,node,socket.io

转载 作者:太空宇宙 更新时间:2023-11-04 03:31:26 28 4
gpt4 key购买 nike

我想通过独立的 Node 应用程序了解远程服务器(使用 Socket.io 运行)是否已启动并监听传入连接。

如果服务器已启动并正在监听,则与 socket-io.client 连接,如果没有,则将某些内容记录到数据库中。

我不知道如何使用 socket-io.client 来完成此操作。地址有 IP 和端口,所以我无法 ping 到没有端口的 IP。

有什么想法吗?谢谢!

最佳答案

您可以尝试与服务器建立 socket.io 连接。如果成功,那么它正在监听。如果失败,那么显然它没有在听。这是一种方法:

// check a socket.io connection on another server from a node.js server
// can also by used from browser client by removing the require()
// pass hostname and port in URL form
// if no port, then default is 80 for http and 447 for https
// 2nd argument timeout is optional, defaults to 5 seconds
var io = require('socket.io-client');

function checkSocketIoConnect(url, timeout) {
return new Promise(function(resolve, reject) {
var errAlready = false;
timeout = timeout || 5000;
var socket = io(url, {reconnection: false, timeout: timeout});

// success
socket.on("connect", function() {
clearTimeout(timer);
resolve();
socket.close();
});

// set our own timeout in case the socket ends some other way than what we are listening for
var timer = setTimeout(function() {
timer = null;
error("local timeout");
}, timeout);

// common error handler
function error(data) {
if (timer) {
clearTimeout(timer);
timer = null;
}
if (!errAlready) {
errAlready = true;
reject(data);
socket.disconnect();
}
}

// errors
socket.on("connect_error", error);
socket.on("connect_timeout", error);
socket.on("error", error);
socket.on("disconnect", error);

});
}

checkSocketIoConnect("http://192.168.1.10:8080").then(function() {
// succeeded here
}, function(reason) {
// failed here
});

关于node.js - 测试套接字是否打开并正在监听,node,socket.io,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37122818/

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