NodeJS - 使用协议 HTTPS 建立连接 WebSocket
Posted
技术标签:
【中文标题】NodeJS - 使用协议 HTTPS 建立连接 WebSocket【英文标题】:NodeJS - Establish a Connection WebSocket with protocol HTTPS 【发布时间】:2021-01-27 14:06:46 【问题描述】:我的 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
);
有了这段代码,我应该有一个 WebSocket 来处理 HTTPS 连接,对吗?
客户端,我有以下代码:
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 连接吗? 非常感谢。
【问题讨论】:
【参考方案1】:我已经找到了问题的解决方案。解决办法是:
服务器端代码:
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'”
感谢日志...
【讨论】:
以上是关于NodeJS - 使用协议 HTTPS 建立连接 WebSocket的主要内容,如果未能解决你的问题,请参考以下文章