【MediaSoup---源码篇】(一)Worker

 一个Worker代表着一个运行在单核CPU上并处理Router实例的mediasoup C++子进程;

首先Worker继承了四个类,以支持以下功能

/*
1.`Channel::ChannelSocket::Listener`:负责与其他节点之间的通信,处理来自其他节点的消息并将本地消息发送给其他节点。
2.`PayloadChannel::PayloadChannelSocket::Listener`:负责传递用户层的数据负载,并提供数据加密和解密功能。
3.`SignalsHandler::Listener`:负责捕捉系统信号(比如SIGINT)并进行相应的处理,例如优雅地退出程序。
4.`RTC::Router::Listener`:负责处理WebRTC中的路由表,以便在不同的节点之间建立点对点连接。
*/
class Worker : public Channel::ChannelSocket::Listener,
               public PayloadChannel::PayloadChannelSocket::Listener,
               public SignalsHandler::Listener,
               public RTC::Router::Listener

在构造函数中,主要启动了libuv,并且由于Worker是继承前四个类的。在构造函数内部进行了一系列的注册,把当前Worker作为了监听,有相应事件发生会回调到Worker中

/* Instance methods. */

Worker::Worker(::Channel::ChannelSocket* channel, PayloadChannel::PayloadChannelSocket* payloadChannel)
  : channel(channel), payloadChannel(payloadChannel)
{
	MS_TRACE();

	// Set us as Channel's listener.把我们设为频道的听众。传入的this为对象
	// 因为Worker继承Channel::ChannelSocket::Listener,所以可以作为子类传入
	this->channel->SetListener(this);

	// Set us as PayloadChannel's listener. 设置我们为PayloadChannel的监听器。
	this->payloadChannel->SetListener(this);

	// Set the SignalHandler. 设置SignalHandler。
	this->signalsHandler = new SignalsHandler(this);

	// Set up the RTC::Shared singleton.设置RTC::Shared单例。
	this->shared = new RTC::Shared(
	  /*channelMessageRegistrator*/ new ChannelMessageRegistrator(),
	  /*channelNotifier*/ new Channel::ChannelNotifier(this->channel),
	  /*payloadChannelNotifier*/ new PayloadChannel::PayloadChannelNotifier(this->payloadChannel));

#ifdef MS_EXECUTABLE
	{
		// Add signals to handle.
		this->signalsHandler->AddSignal(SIGINT, "INT");
		this->signalsHandler->AddSignal(SIGTERM, "TERM");
	}
#endif

	// Create the Checker instance in DepUsrSCTP. 在DepUsrSCTP中创建Checker实例。
	DepUsrSCTP::CreateChecker();

	// Tell the Node process that we are running. 告诉我们正在运行的Node进程。
	this->shared->channelNotifier->Emit(Logger::pid, "running");

	MS_DEBUG_DEV("starting libuv loop"); // 启动libuv循环
	DepLibUV::RunLoop();
	MS_DEBUG_DEV("libuv loop ended");
}

猜你喜欢

转载自blog.csdn.net/qq_40179458/article/details/133160641