#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, и я получил 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