可能ですが、まず node.js がどのように機能するかを理解する必要があります。
残念ながら、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');
};