监听主进程上的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'); };