请教一下cluster和socket
发布于 6 年前 作者 CmPandaV587 2273 次浏览 来自 问答

代码如下

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上试试看,谢谢!!!

回到顶部