node.js - 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 连接吗?非常感谢。
解决方案
我找到了解决问题的方法。解决方案是:
服务器端代码:
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' ”
感谢日志...
推荐阅读
- android - Problem with inserting row on mySQL using JDBC connection in android
- go - go jwt ValidationKeyGetter does not compile
- kotlin - 在哪里放置 Kotlin 文件的文档(不是包,不是模块,不是类)
- java - 如果 else 条件语句在 java 中不能正常工作
- excel - Excel根据另一个单元格的值复制单元格值
- javascript - How do I display certain html based on if statement?
- java - Changing android activity background color programmatically using settings
- python - In Python, if I type a=1 b=2 c=a c=b, what is the value of c? What does c point to?
- excel - Find similar cells in a row and replace with cell next to it
- python - 如何从不同目录导入同名的python模块?