примечание Я решил свою проблему. Решение в комментарии ниже ...
Я работаю с ws lib в nodejs и Max / MSP. Я пишу сценарий, который должен пытаться подключиться к нескольким IP-адресам сервера на основе того, к чему он успешно подключался в прошлом, и если он не может найти работающий сервер для запуска своего собственного сервера, и я хочу иметь возможность установить время ожидания попытки подключения вручную (когда сервер не находит сервер с указанным IP-адресом, ws возвращает ошибку с кодом «ETIMEDOUT», что необходимо, но период равен ~ 60, и я хочу установить его на намного короче)
Я искал решения по переполнению стека и github, но не нашел ничего конкретного для моей проблемы
Max.addHandler('isRemoteServer?', (IPs) =>{
IPCounter = 0
IPs = IPs.split(" ")
Max.post('attempting to connect to ' + IPs[IPCounter])
function tryConnect(){
let url = 'ws://' + IPs[IPCounter] + ':8080'
connection = new WebSocket(url)
connection.onopen = () => {
connection.send('hello from ' + os.hostname)
Max.post('connected to remote at IP ' + IPs[IPCounter])
}
connection.onerror = (error) => {
errorCode = error.error.code
//console.log()
switch(errorCode){
case "ECONNREFUSED":
case "ETIMEDOUT":
Max.post('remote server not detected at ' + IPs[IPCounter] )
IPCounter++
if(IPCounter > IPs.length){
// no server dected running at any stored IPs, so run a server on this machine
runServer();
} else{
//try another IP
Max.post('attempting to connect to ' + IPs[IPCounter])
tryConnect()
}
break;
default:
Max.post('default ',JSON.stringify(error.error))
}
}
connection.onmessage = (e) => {
Max.post(e.data)
}
}
tryConnect()
})
скрипт работает хорошо, за исключением того, что период между новой попыткой и ответом ETIMEDOUT составляет ~ 60 секунд, и это слишком долго для меня. Я бы предпочел около 10.