Socket.io ошибка версии неподдерживаемого протокола v3

#node.js #websocket #socket.io

#node.js #websocket #socket.io

Вопрос:

Я застрял с более новой версией socket.io . Все было хорошо, но когда я захотел перейти на socket.io 3, все просто сломалось, и в настоящее время на клиенте я получаю код состояния HTTP 400 со следующим ответом JSON — {"code":5,"message":"Unsupported protocol version"}

Конфигурация на стороне сервера —

 const io = require("socket.io")(server, {
    cors: {
      origin: config.clientURL,
      methods: ["GET", "POST"],
      credentials: true,
    },
  });
 

Конфигурация на стороне клиента —

 const socket = io(backendURL, {
  withCredentials: true,
});
 

Я перепробовал очень много вещей и много раз перераспределял, но ошибка не исчезла.

Для справки, у меня есть эти репозитории github —

Клиент в react.js репозитории GitHub

Сервер в nodeJs репозитории и socket.io.js GitHub

Ответ №1:

Похоже, может быть несоответствие между версиями вашего socket.io-клиента и сокета.сервер ввода-вывода.

Сначала обновите серверы, установив для allowEIO3 значение true (добавлено в socket.io@3.1.0 )

 const io = require("socket.io")({
  allowEIO3: true // false by default
});
 

После обновления socket.io-client (последняя версия на данный момент — 3.1.1) вы можете установить его обратно или удалить, поскольку значение по умолчанию равно false

 const io = require("socket.io")({
  allowEIO3: false
}); 

Комментарии:

1. Хотя я обновил оба до версии 3.1.1, сообщения об ошибках все еще сохранялись. Просто устранено после использования allowEIO3. Понятия не имею.

2. спасибо, сэр, вы сэкономили мне много времени

3. Я столкнулся с той же проблемой. Хотя мои клиентские и серверные версии сокетов были одинаковыми. Только что обновил обе до самой высокой из основных версий. Не уверен, что вызвало это. Разница заключалась только в том, что у меня было настроенное серверное приложение на новом экземпляре AWS, в то время как мое реагирующее приложение все еще находилось на более старом.

Ответ №2:

Я устанавливаю старую версию с помощью

 npx create-nuxt-app@2.15.0
 

Он установит nuxt с express.js в одном проекте.
Затем обновите пакеты npm с помощью команд:

 npx npm-check-updates -u
npm i
 

И сокет.io хорошо работает между nuxt и socket.ввод-вывод на сервере