簡體   English   中英

Socket.io無法與https(Let's Encrypt)一起使用

[英]Socket.io not working with https (Let's Encrypt)

我正在使用ASP.NET CORE 2.0建立電子商務。 電子商務具有使用nodejs和程序包socket.io構建的聊天室。 socket.io服務器服務器上遠程的。 當我在本地使用運行Visual Studio調試器的Socket.io客戶端訪問遠程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');
});

但是,當我發布網站並獲得由Nginx / kestrel提供的socket.io客戶端的html頁面時,我收到一條錯誤消息,提示我正在混合某些東西,我沒有注意該錯誤消息,因為我記得我在服務器socket.io和客戶端上使用了http。 因此,我更改了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的代理,我在Ubuntu 17上使用ufw。

我昨天收到此錯誤。 我什至沒有晚上睡覺。 但是我知道了。 我發送了這樣的證書。

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');
});

我不希望任何人通過挫折感。 希望我能幫助別人。

您需要為客戶端和服務器添加傳輸類型

服務器

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 });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM