Могу ли я использовать 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.