主进程代码app.js
const cluster=require('cluster');
const net =require('net');
//判断是否在主进程中
if(cluster.isPrimary)
{
//子进程中运行模块文件,exec的文件路径
cluster.setupPrimary({
exec:'child940.js'
});
//创建子进程,必须写在server的外面,如果写在server里面,子进程接收不到内容;
//因为worker.send是一个异步操作,很可能客户端已经发送了信息,而子进程却后一步建立而没有收到信息
const worker=cluster.fork();
//创建net服务器
const server =net.createServer();
server.on('connection',function(socket){
console.log(socket.remoteAddress);
//连接后创建socket对象
if(socket.remoteAddress!=='localhost')
{
//将socket对象发送给子进程
worker.send('socket',socket);
return;
}
//如果不是localhost,即主进程处理
socket.end('客户端请求被主进程处理');
})
server.listen(42367,'localhost');
server.on('listening',function(){
console.log('net服务器端口监听已开启');
});
}
//子进程处理代码 child.js
//子进程接受信息,worker.send()发过来的
process.on('message',function(m,socket){
if(m==='socket')
{
//socket对象接受到的信息
socket.on('data',function(data){
console.log('收到客户端发来的信息',data.toString());
//接受的字节数
console.log(socket.bytesRead);
const response=data.toString();
//将客户端发送过来的数据,再返回给客户端
socket.write(response);
});
}
})
//客户端 client.js
const net =require('net');
const client=new net.Socket();
client.connect(42367,'localhost',function(){
console.log('已经连接到服务器端');
client.write('你好');
});
client.on('data',function(data){
console.log('接收到服务端数据:'+data.toString());
client.end();
});
client.on('close',function(){
console.log('客户端关闭连接');
})