Могу ли я использовать socket.io-client для подключения к стандартному веб-расписанию?

Попытка использовать socket.io-client для подключения к серверу websocket, который написан на Go. Я успешно подключился с помощью библиотеки node WebSocket (npm). Поэтому рабочий код Websocket выглядит так:

  goSocketPort = 6060
  url = "ws://localhost:#{goSocketPort}/streamresults/"
  ws = new WebSocket(url)

  ws.on('open', ->
    log "socket opened"
  )

  ws.on('message', (message) ->
      console.log('received: %s', message)
    #log "Socket message: #{JSON.stringify message}"
  )

Довольно легко, и он работает - сокет на другом конце отправляет сообщения на заданную частоту. Но я сначала попытался с socket.io-client (npm) и просто не мог заставить его уйти. Он, безусловно, перечисляет websocket как его первый предпочтительный транспорт, но, черт возьми, я могу его подключить:

socket = ioClient.connect("#{url}", {port: goSocketPort, transports: ['xhr-polling', 'websocket']}) 

socket.on("connect", (r) ->
  log "connected to #{url}"
)

Соединение никогда не происходит, поэтому ни один из событий on не запускается, и код сразу исчезает. Я попытался: оставив порт с URL-адресом и добавив его в параметры, оставив опцию транспонирования (что означает "все" в соответствии с документами) и с использованием http-url. Является ли socket-io.client неспособным подключиться к "стандартному" websocket?

Ответы

Ответ 1

Основываясь на нашем чате, похоже, что вы были введены в заблуждение по этой цитате:

Клиент socket.io - это в основном простая реализация интерфейса HTTP Socket. Он похож на WebSocket, предоставляя дополнительные функции и используя другие транспорты, когда WebSocket не поддерживается браузером пользователя.

Это означает, что он похож на WebSocket с точки зрения клиент-серверного кода, который взаимодействует с клиентом/сервером Socket.io. Однако сетевой трафик сильно отличается от простого WebSocket - там начальное рукопожатие в дополнение к более надежному протоколу, построенному поверх WebSocket, после подключения. Рукопожатие описано здесь и протокол сообщений здесь (оба являются ссылками на спецификацию протокола Socket.IO).

Если вы пишете сервер WebSocket, вам лучше использовать только открытый интерфейс WebSocket, а не клиент Socket.io, если вы не собираетесь реализовать весь протокол Socket.io.