mediasoup 学习笔记【一】 worker

如果以前接触过nodejs,应该对cluster有所了解,不管是 expressjs, eggjs 等等框架,都启用了多进程方案以提升性能。当然mediasoup也不例外。

今天再一起回忆下,cluster这个node模块。
官网给的例子,开代码就可以清楚,
这里区分主进程和子进程,主进程不负责业务代码部分,只负责子进程的监控方面的工作。
cluster fork 就是 起个进程 再次执行非 master的 代码部分;

const cluster = require('cluster');
const numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
  console.log(`Master ${process.pid} is running`);

  // Fork workers.
  for (let i = 0; i < numCPUs; i++) {
    cluster.fork();
  }

  cluster.on('exit', (worker, code, signal) => {
    console.log(`worker ${worker.process.pid} died`);
  });
} else {
//something
  console.log(process.pid)
}

进程之间的通信方式,或者是共享数据方式,当然真正的方法 用数据库或者 redis等等方式。

拿一个实际的例子,用户进入房间,房间当前人数的案例。
比如说有四个人进入同一个房间,很有可能不是同一个进程处理的,这样就需要一个集中整理房间以及房间人数的地方。
可以看下面代码

let users = new Map()
if(cluster.isMaster){
	const worker = cluster.fork()
	worker.send('other something');
	worker.on('message', function(message){
	   switch(message.action){
			case 'join':
			   users.set(messages.data.userId, message.data)
			   break;
			case 'leave':
			   users.delete(message.data.userId);
			   break;
			default:
			   log('unknow action name')
		}
	})
} else {

   //这里是业务代码
   users是可以直接获取的读取的,
   process.on('message', reciveMessageHandle) //接收主进程的消息
   //当房间有人进来的时候
   process.send({action:'join',data:{userId}});

}

看完代码应该比较好理解了,当然这仅仅是个示意demo代码。
再扩展下大家可以进一步考虑下,守护进程做一个永远都不会挂掉的服务(当然有点夸张);主进程监听到子进程异常退出之后立即 fork 当然这是暴力方式,不过可以在方法里面增加报警的通知(短信、邮件)等等。

mediasoup createWorker 相关参数

  • logLevel : “debug”, “warn”, “error” and “none”, //这个就不多说了
  • logTags :‘info’,‘ice’,‘dtls’,‘rtp’,‘srtp’,‘rtcp’,‘rtx’,‘bwe’,‘score’,‘simulcast’,‘svc’,‘sctp’
  • rtcMinPort: 最小端口
  • rtcMaxPort:最大端口
  • dtlsCertificateFile,dtlsPrivateKeyFile 证书相关
  • appData
const mediasoup = require('mediasoup');
const worker = mediasoup.createWorker({...options})

#2020 疫情期间 学点东西#

你可能感兴趣的:(node,js)