сокет.клиент ввода-вывода не устанавливает sid в запросах

#node.js #socket.io

#node.js #socket.io

Вопрос:

Я пытаюсь создать скрипт nodejs для связи с сокетом.сервер ввода-вывода.

 const io = require('socket.io-client');
const socket = io('http://192.168.144.249');

socket.on('connect', () => {
  console.log('connected');
})
  

Используя wireshark для отслеживания трафика, я вижу следующее:

получение sid и cookie

Таким образом, браузер отправляет мне sid, как в теле ответа, так и в файле cookie. К сожалению, мои следующие запросы не включают этот sid, и я получил 400 Bad Request сообщение об ошибке:

введите описание изображения здесь

Когда я пытаюсь создать тот же клиент из окон браузера, я вижу, что этот файл cookie действительно установлен, как в качестве файла cookie, так и в качестве параметра запроса:

введите описание изображения здесь

Я не хочу использовать браузер, я хочу использовать автономный скрипт узла. Насколько я понял, синтаксический анализ ответа и включение идентификатора сеанса должны выполняться автоматически socket.io-client . Я ошибаюсь? Если да, то как я могу перехватить это событие, чтобы я мог отправить sid со следующими запросами?

Должен ли я сначала выполнить простой http-запрос к серверу, получить оттуда sid, а затем добавить его в сокет.клиент ввода-вывода при его создании с использованием пользовательских файлов cookie или пользовательских параметров запроса?

Я также вижу, что автономный скрипт узла использует движок.ввод-вывод версии 4 ( EIO=4 в запросах GET), в то время как браузер выполняет это с помощью движка.версия ввода-вывода 3, но полученный ответ, похоже, точно такой же, поэтому я не думаю, что это мешает моему сценарию автоматически завершить рукопожатие с сервером.

Ответ №1:

Ну, я был неправ. Это действительно была проблема несоответствия протокола.

Я смог заставить свой скрипт работать с использованием socket.io-client@1.0.2 . Установите его с помощью:

npm install socket.io-client@1.0.2