[MediaSoup---ソースコード] (1) ワーカー

 Worker は、シングルコア CPU 上で実行され、Router インスタンスを処理する mediasoup C++ 子プロセスを表します。

まず、Worker は以下の機能をサポートするために 4 つのクラスを継承します。

/*
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 は最初の 4 つのクラスを継承します。一連の登録はコンストラクター内で行われ、現在の 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
おすすめ