【发布时间】:2012-01-23 16:55:33
【问题描述】:
这个想法是在主进程中创建服务器,并在工作进程中处理请求。我想利用所有的 CPU 内核并实现负载平衡。
起初我尝试将服务器处理程序从 master 发送到 worker:
var cluster = require('cluster');
if (cluster.isMaster) {
var app = require('express').createServer();
app.listen(1234);
var worker = cluster.fork();
worker.stdin.write('fd', 'utf8', app._handle);
} else {
process.stdin.resume();
process.stdin.on('fd', function(fd){
var stream = require('net').Stream(fd);
var io = require('socket.io').listen(stream);
io.sockets.on('connection', function(socket){
...
}
}
}
但是 write 没有在 worker 中触发 ('fd'...) 事件处理程序。然后我把一切都掌握了,以检查这是否可能:
var app = require('express').createServer();
app.listen(1234);
var stream = require('net').Stream(app._handler);
var io = require('socket.io').listen(stream);
服务器启动没有任何错误,但不工作。我无法使用标签从客户端请求 socket.io.js 脚本:
<script src="http://localhost:8080/socket.io/socket.io.js"></script>
Response: Cannot GET /socket.io/socket.io.js
所以我有两个烦恼:
- 如何将打开的套接字描述符发送给工作人员?
- 如何通过这个描述符为服务器设置handler?
【问题讨论】:
标签: node.js cluster-computing socket.io