首页 > 解决方案 > NodeJS - 使用协议 HTTPS 建立连接 WebSocket

问题描述

我的 HTTPS 和 WebSocket 连接有问题(我使用 Node.JS 作为服务器)。我已经使用 OpenSSL 生成了 SSL 证书,并使用以下代码将它们导入服务器:

const https = require('https');
var app = express();
...
const WebSocket = require('ws');
...
var serverHttps = https.createServer({
        key: fs.readFileSync(path.join(pathCertificati, 'key.pem')),
        cert: fs.readFileSync(path.join(pathCertificati, 'cert.pem'))
    }, app).listen(3000, () => {
    console.log('In ascolto sulla porta 3000 HTTPS.')
    })

const wss = new WebSocket.Server({
    server: serverHttps, 
    adress: '192.168.12.40',
    port: 9000
});

使用此代码,我应该有一个处理 HTTPS 连接的 WebSocket,对吗?

客户端,我有以下代码:

socket = new WebSocket("wss://192.168.12.40:9000");
socket.onopen = function ()...
socket.onclose = function ()...
socket.onerror = function (error) {
        console.log("Errore nella connessione!");
        console.log(error);
    }

当我使用地址加载页面时:https://192.168.12.40:3000并执行上述代码时,出现错误消息:

WebSocketScript.js:26 WebSocket 连接到“wss://192.168.12.40:9000/”失败:连接建立错误:net:: ERR_SSL_PROTOCOL_ERROR

你有什么想法在 HTTPS 页面上建立 WebSocket 连接吗?非常感谢。

标签: node.jswebsocketwebrtc

解决方案


我找到了解决问题的方法。解决方案是:

服务器端代码:

var serverHttps = https.createServer({
        key: fs.readFileSync(path.join(pathCertificati, 'key.pem')),
        cert: fs.readFileSync(path.join(pathCertificati, 'cert.pem'))

    }, app).listen(3000, () => {
        // Messaggio di attivazione del server in ascolto sulla porta 3000
        console.log('Listening ' + 3000 + ' HTTPS.');
    })

serverHttps.on('upgrade', function upgrade(request, socket, head) {
    const pathname = url.parse(request.url).pathname;

    if (pathname === "/") {
        wss.handleUpgrade(request, socket, head, function done(ws) {
            wss.emit('connection', ws, request);
        });
    }
});

// Create WebSocket
const wss = new WebSocket.Server({ noServer: true });

wss.on('error', function () {...}
wss.on('connection', function (ws) {...}

客户端:

socket = new WebSocket("wss://192.168.12.40:3000);

这与服务器端使用的地址相同,它触发事件“ serverHttps.on('upgrade'

感谢日志...


推荐阅读