请教一下cluster和socket
代码如下
var net = require('net');
var PORT = 7001;
var HOST = '192.168.3.196';
// tcp服务端
var server = net.createServer(function(socket) {
console.log(process.pid);
// console.log('服务端:收到来自客户端的请求');
console.log('远程地址:' + socket.remoteAddress);
// console.log('协议:' + socket.remoteFamily);
// console.log('远程端口:' + socket.remotePort);
// console.log('Address:' + JSON.stringify(socket.address()));
var count = 0;
socket.on('data', function(data) {
// count++;
console.log("PID : " + process.pid);
// console.log('服务端:收到客户端数据,内容为{' + data + '}');
// 给客户端返回数据
// socket.write('ok');
for (var i = 0; i < 999999; i++)
for (var j = 0; j < 5000; j++)
i * j;
// console.log("Done");
});
socket.on('close', function() {
console.log('服务端:客户端连接断开');
socket.end();
socket.destroy();
});
socket.on('error', function(data) {
console.log('异常:' + data);
});
socket.on('timeout', function(data) {
console.log('超时:' + data);
});
});
server.listen(PORT, HOST, function() {
console.log('服务端:开始监听来自客户端的请求 ' + process.pid);
});
使用PM2启动服务 pm2 start server.js -i 4 四个进程启动完成,然后使用多个client连入,并循环发送消息 问题来了,发现始终是3号进程去处理的,我以为由于for阻塞了运行,那工作应该被分配给其他的进程去处理, 但始终都是3号进程在处理,无论是新连接连入log还是新消息接受log,都是由3号进程打印 想请教一下这是为什么
6 回复
自顶
ヽ(°◇° )ノ
自顶
ヽ(°◇° )ノ
我也觉得很奇怪,刚在mac上随便跑了一下,没问题,还是比较均衡的。可能是楼主环境问题,node和pm2版本,还有os。
来自✨ Node.js开源项目精选✨
@vendar 我擦勒,我是windows下,你的意思是说,用上面的代码当服务跑,pm2的 logs 是均衡的多个进程都有在打印日志?
对,都有请求日志,你可以试试Linux应该也没问题。Windows可能支持不太好,没用过。
来自✨ Node.js开源项目精选✨
@vendar 我丢到Linux上试试看,谢谢!!!