Когда я пытаюсь подключиться в качестве клиента к ws-серверу, как я могу установить время ожидания, прежде чем он вернет код ошибки ETIMEDOUT? - PullRequest
0 голосов
/ 13 июня 2019

примечание Я решил свою проблему. Решение в комментарии ниже ...

Я работаю с 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.

...