是否有可能在现有 tls.Server 之上创建 https 服务器?文档说:“这个类是 tls.Server.. 的子类”。我想使用 tls.Server 处理纯数据流,如果需要,让 https 服务器处理其余部分。(和 https 的 express 一样,只是在较低的层)
问候
是否有可能在现有 tls.Server 之上创建 https 服务器?文档说:“这个类是 tls.Server.. 的子类”。我想使用 tls.Server 处理纯数据流,如果需要,让 https 服务器处理其余部分。(和 https 的 express 一样,只是在较低的层)
问候
没有任何官方/支持的方式。
但是,如果您查看 https 服务器的源代码,它只是将 TLS 服务器和 HTTP 连接处理程序连接在一起的粘合剂:
function Server(opts, requestListener) {
if (!(this instanceof Server)) return new Server(opts, requestListener);
if (process.features.tls_npn && !opts.NPNProtocols) {
opts.NPNProtocols = ['http/1.1', 'http/1.0'];
}
/// This is the part where we instruct TLS server to use
/// HTTP code to handle incoming connections.
tls.Server.call(this, opts, http._connectionListener);
this.httpAllowHalfOpen = false;
if (requestListener) {
this.addListener('request', requestListener);
}
this.addListener('clientError', function(err, conn) {
conn.destroy();
});
this.timeout = 2 * 60 * 1000;
}
要在 TLS 连接处理程序中切换到 HTTPS,您可以执行以下操作:
var http = require('http');
function myTlsRequestListener(cleartextStream) {
if (shouldSwitchToHttps) {
http._connectionListener(cleartextStream);
} else {
// do other stuff
}
}
上面的代码是基于0.11版本的(即当前的master)。
警告
在升级到较新版本的过程中,使用内部 Node API 可能会咬到您(即您的应用程序可能会在升级后停止工作)。