首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NodeJS -建立具有HTTPS协议的连接WebSocket

问NodeJS -建立具有HTTPS协议的连接WebSocket
EN

Stack Overflow用户
提问于 2021-01-27 14:06:46
回答 1查看 376关注 0票数 0

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

代码语言:javascript
复制
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连接,对吗?

客户端,我有以下代码:

代码语言:javascript
复制
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);
    }

当我使用address:https://192.168.12.40:3000和上面的代码加载页面时,会出现错误消息:

指向'wss://192.168.12.40:9000/‘的WebSocketScript.js:26 WebSocket连接失败:连接建立中的错误:WebSocketScript.js:26

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

EN

回答 1

Stack Overflow用户

发布于 2021-01-28 16:37:26

我已经找到了解决这个问题的办法。解决办法是:

服务器端代码:

代码语言:javascript
复制
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) {...}

客户端:

代码语言:javascript
复制
socket = new WebSocket("wss://192.168.12.40:3000);

这是服务器端使用的相同地址,它触发事件“serverHttps.on(‘升级’)”

谢谢原木..。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65920794

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档