Socket.io не работает с https (Let's Encrypt) - PullRequest
0 голосов
/ 10 мая 2018

Я использую ASP.NET CORE 2.0 для создания электронной коммерции.В электронной коммерции есть чат, созданный с использованием nodejs и пакета socket.io.Сервер socket.io является удаленным на сервере.Когда я использую клиент Socket.io локально, с запуском Visual Studio Debugger, для доступа к удаленному socket.io, все работает нормально.

Код такой, обратите внимание, что я неиспользуя https

var app2 = require('express')();
var http = require('http').Server(app);
var http2 = require('http').Server(app2);
var io = require('socket.io')(http);


http.listen(3009, function () {
    console.log('listening on port 3009');
});

http2.listen(3011, function () {
    console.log('listening on port 3011');
});

Но когда я публикую свой веб-сайт и получаю html-страницу вместе с клиентом socket.io, обслуживаемым Nginx / kestrel, я получаю сообщение об ошибке, говорящее, что я что-то смешал, я неОбратите внимание на сообщение об ошибке, потому что я вспомнил, что использовал http на своем сервере socket.io и клиентах.Поэтому я изменил сервер и клиенты socket.io, но теперь не могу подключиться.

Мои изменения таковы:

var app2 = require('express')();
var http = require('https').Server(app);
var http2 = require('https').Server(app2);
var io = require('socket.io')(http);


http.listen(3009, function () {
    console.log('listening on port 3009');
});

http2.listen(3011, function () {
    console.log('listening on port 3011');
});

клиентов

  myIo = io('https://www.example.com.br:3009', { secure: true, reconnect: true, rejectUnauthorized: false });

Я использовал Давайтешифрование для включения соединений https, я использую Nginx в качестве прокси для Kestrel, я использую ufw на Ubuntu 17.

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Я получил эту ошибку вчера. Я даже не могу спать по ночам. Но я получил это работает. Я отправил сертификаты вот так.

var app = require('express')();

var app2 = require('express')();
var fs = require('fs');


var options = {
    key: fs.readFileSync('/etc/letsencrypt/live/example.com/privkey.pem'),
    cert: fs.readFileSync('/etc/letsencrypt/live/example.com/cert.pem'),
    ca: fs.readFileSync('/etc/letsencrypt/live/example.com/chain.pem')
};

var http = require('https').Server(options, app);


var http2 = require('https').Server(app2);
var io = require('socket.io')(http);

app.get('/', function (req, res) {
    res.send('server is running');
});

app2.get('/', function (req, res) {
    res.send('admin area');
});

Я не хочу, чтобы кто-то передавал чувство фрустрации. надеюсь, что смогу кому-нибудь помочь.

0 голосов
/ 10 мая 2018

Вам необходимо добавить тип транспорта для вашего клиента и сервера

сервер

var io = require('socket.io')(http); io.set('transports', ['websocket']);

клиент

myIo = io('https://www.example.com.br:3009', { transports: ['websocket'], upgrade: false }, { 'force new connection': true });

...