Задать вопрос
@MaKS_Ibl4

Почему возникает ошибка при подключении к socket io?

Имеем следующий код сервера:
var https = require('https'),     
    fs =    require('fs'); 
const opts = {
  key: fs.readFileSync('/home/admin/conf/web/ssl.key'),
  cert: fs.readFileSync('/home/admin/conf/web/ssl.crt')
}
var app = https.createServer(opts);
var io = require('socket.io').listen(app);
app.listen(8091, function(){
  console.log("HTTPS on port " + 8091);
})

Я его менял уже несколько раз, до этого был express но суть та же.

На клиенте:
var socket = io.connect(':8091');

И при заходе на страницу:
WebSocket connection to 'wss://domain:8091/socket.io/?EIO=3&transport=websocket&sid=zDddBcCarJyExmO9AAAD' failed: WebSocket is closed before the connection is established.

Куда копать? С чем может быть связанна эта проблема?

ps: как показал практика дело в кодировке, но не ясно где конкретно проблема.
Если пользователь с русским именем и фамилией заходит, такая проблема, если с английскими то всё хорошо. Если в чат накидать сообщение то при обновлении страницы и подгрузке истории так сказать, можно словить:
socket.io.js:6783 Uncaught Error: Illegal attachments
at decodeString (socket.io.js:6783)
at Decoder.add (socket.io.js:6731)
at Manager.ondata (socket.io.js:418)
at Socket. (socket.io.js:1512)
at Socket.Emitter.emit (socket.io.js:4389)
at Socket.onPacket (socket.io.js:2514)
at XHR. (socket.io.js:2331)
at XHR.Emitter.emit (socket.io.js:4389)
at XHR.Transport.onPacket (socket.io.js:2947)
at callback (socket.io.js:3821)

pss: Даже стыдно писать причину проблемы, старая версия socket.io на клиентской части, так как в локалке и сервер давно не обновлял, а после переноса с гита на vps получилось что сервер самый последний, а клиент с былых времён)))
  • Вопрос задан
  • 1082 просмотра
Подписаться 1 Оценить 1 комментарий
Решения вопроса 1
@MaKS_Ibl4 Автор вопроса
Проблема в старой версии socket io клиентской части))) Всем спасибо за помощь.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@emp1re
var io = require('socket.io').listen(app)
Ответ написан
@de1m
Посмотрите вот этот пример. Сам по себе пример может и не очень, но сокет приделан хорошо.
Нужно по возможности стараться использовать страндартные порты (80,443), так как все остальные могут быть заблокированны у клиента. В примере используются порты 5000,5001, но их можно легко поменять на нужные.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы