节点:为同一台服务器提供安全 (wss://) 和不安全 (ws://) 连接

Node: serving secure (wss://) and insecure (ws://) connections with the same server

我有一个使用 ws websocket 库的节点服务器。我需要为 wswss 连接提供服务,因为并非我所有的客户都可以与 wss 通信。单个 websocket 服务器是否可以为两种类型的连接提供服务?如果可以,怎么做?

目前我这样初始化我的服务器:

var https = require('https');
var WebSocketServer   = ws.Server;
var fs = require('fs');
var app = https.createServer({
        key: fs.readFileSync( ssl_key ),
        cert: fs.readFileSync( ssl_cert )
    }, processRequest ).listen( port );

var wss = new WebSocketServer( { server: app } );

然而,这可以防止不安全的 ws 连接(握手失败)。是否可以同时提供两种类型的连接?

感谢您的建议!

好的,事实证明这很简单。这个想法是使用代理,它可以处理两种类型的连接。原来的服务器不用修改,挺好的。我最终使用了 http-proxy package (naturally, more approaches are available)。相关代码如下所示:

require('http-proxy').createProxyServer({
    target: {
        host: 'localhost', // the insecure (ws://) websocket server
        port: 9000, 
        ws: true
    },
    secure: true,
    ssl: {
        key: fs.readFileSync(__dirname + '/server.key'),
        cert: fs.readFileSync(__dirname + '/server.crt')
    }
}).listen(8000);