NodeJS从现有的tls.Server创建https

时间:2013-07-02 13:25:49

标签: javascript node.js

是否有可能在现有的tls.Server之上创建https服务器? 文档说:“这个类是tls.Server的子类......”。 我想使用tls.Server来处理纯数据流,如果需要,让https服务器处理其余的数据流。 (如使用https表达,只是在较低层)

此致

1 个答案:

答案 0 :(得分:2)

没有任何官方/支持方式。

但是,如果你看一下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(即当前主版)。

警告

使用内部Node API可能会在升级到较新版本时咬你(即升级后你的应用程序可能会停止工作)。