节点:为同一台服务器提供安全 (wss://) 和不安全 (ws://) 连接
Node: serving secure (wss://) and insecure (ws://) connections with the same server
我有一个使用 ws websocket 库的节点服务器。我需要为 ws
和 wss
连接提供服务,因为并非我所有的客户都可以与 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);
我有一个使用 ws websocket 库的节点服务器。我需要为 ws
和 wss
连接提供服务,因为并非我所有的客户都可以与 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);