Сервер Socket.io через https - PullRequest
0 голосов
/ 03 мая 2020

Я попытался преобразовать пример запуска сокета IO в https следующим образом:

const fs = require('fs');
const app = require('https').createServer({
    key: fs.readFileSync("privkey.pem"),
    cert: fs.readFileSync("cert.pem"),
    ca: fs.readFileSync("fullchain.pem"),
}, handler)
const io = require('socket.io')(app);

app.listen(443);

function handler (req, res) {
    res.writeHead(200);
    res.end();
}

io.on('connection', (socket) => {
  socket.emit('news', { hello: 'world' });
  socket.on('my other event', (data) => {
    console.log(data);
  });
});

Но выполнение следующего в моем браузере не работает:

const ws = new WebSocket("wss://example.com");

Но я получил следующая ошибка:

Firefox can’t establish a connection to the server at wss://example.com/.

Я попытался отладить это, выполнив команду curl:

curl -i -N -H "Connection: Upgrade" -H "Upgrade: websocket" -H "Host: example.com" -H "Origin: https://example.com " https://example.com

, и в результате получилось:

curl: (52) Empty reply from server

Ни один из Достигнут код журнала консоли, и при выполнении всего этого в скрипте узла нет ошибок.

Почему я не могу подключиться к своему серверу веб-сокетов?

1 Ответ

0 голосов
/ 04 мая 2020

Согласно do c:

Socket.IO НЕ является реализацией WebSocket. Хотя Socket.IO действительно использует WebSocket в качестве транспорта, когда это возможно, он добавляет некоторые метаданные к каждому пакету: тип пакета, пространство имен и идентификатор пакета, когда требуется подтверждение сообщения. Вот почему клиент WebSocket не сможет успешно подключиться к серверу Socket.IO, а клиент Socket.IO также не сможет подключиться к серверу WebSocket.

Так что это не правильно:

const ws = new WebSocket("wss://example.com");

Вы должны использовать:

const socket = io('https://your-server-address');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...