监听主进程上的HTTP通信,处理subprocess上的连接?

我正在寻找一种方法来让套接字监听主进程上的HTTP请求,然后使用process.send()将所有传入连接和请求数据传递给subprocess,并在subprocess中处理HTTP请求。

但是,我无法find一种方法来将传递的连接和请求数据附加到subprocess中的HTTP服务器,而无需通过.listen()套接字初始化服务器。

那么,是否有可能使用HTTP服务器来处理从另一个进程传入的连接呢? 任何非公开的API解决scheme也将做(尽pipeJavaScript的希望尽pipe)。

我想我可以初始化服务器来侦听一些虚拟套接字,然后popup传入的连接,但这似乎并不理想。 传入监听套接字或使用群集或反向代理也不是最佳的在我的情况。

这是可能的,但首先你需要了解一下node.js是如何工作的:

  • TCP服务器(来自net.createServer )基本上是一个EventEmitter ,它只发出connection事件。

  • HTTP服务器(来自http.createServer )是一个具有连接parsing器的TCP服务器。

不幸的是,HTTP服务器硬连线到TCP服务器( 请参阅源文件 ):

 function Server(requestListener) { if (!(this instanceof Server)) return new Server(requestListener); net.Server.call(this, { allowHalfOpen: true }); ... this.addListener('connection', connectionListener); ... } 

你需要的是将你的套接字传递给http.js中定义的connectionListener。 好消息是模块输出它:

 exports._connectionListener = connectionListener; 

我还没有尝试过这个代码,但它应该与一些调整:

 var util = require('util'), events = require('events'), http = require('http'), express = require('express'), app = express(); function FakeServer() { events.EventEmitter.call(this); this.on('connection', http._connectionListener); this.on('request', app); } util.inherits(FakeServer, events.EventEmitter); var server = new FakeServer(); process.on('message', function ('socket', socket) { server.emit('connection', socket); }); // you can use app as a regular express app app.get('/hello', function (req, res) { res.send('world'); };