WebRTCシグナリングサーバーの構築

WebRTC の紹介では、シグナル サーバーはミドル エンドにデータを送信するために使用されると述べられており、シグナル サーバーは 2 つの webRTC ミドル エンド間の通信を実現する上で重要な役割を果たします。今日はシグナリングサーバーを実装しましょう。

フロントエンドの開発者として、バックエンドのことにはあまり詳しくないので、市販のサーバー ソフトウェアと nodejs を使用してシグナリング サーバーを構築することしかできません。

ビジネスの論理

2 人のユーザーがコミュニケーションを取りたい場合は、最初にルームを作成する必要があります。ルームに正常に参加すると、両者は必要な情報を交換できます。

通信中の 2 者が通話を終了すると、ユーザーはルームを出るためにシグナリング サーバーにメッセージを送信する必要があります. このとき、シグナリング サーバーはルーム内の全員をクリアする必要があります; ルームに誰もいない場合、空の部屋を破壊する必要があります。

そのようなロジック socket.io はすでにそれを実現しており、それを使用するだけでよく、自分で再開発する必要はありません。

したがって、nodejs+express+socket.io を使用してシグナリング サーバーを実装します。

  1. サーバーの作成
const http = require('http');//引入http库
const express = require('express'); //引入express库

//创建HTTP服务,并侦听8980端口
const app = express();
const http_server = http.createServer(app);
http_server.listen(8080, '0.0.0.0');

まず、express を使用して Web アプリケーションを作成します。次に、HTTP ライブラリの createServer() メソッドを呼び出して、HTTP オブジェクト、つまり http_server を作成します。最後に、http_server オブジェクトの listen() メソッドを呼び出して、ポート 8080 でリッスンします。以上の手順により、HTTP サービスが実現されます。

  1. socket.ioのコールバック関数を登録する
io.sockets.on('connection', (socket) => {
    
    

  //收到message时,进行转发
  socket.on('message', (message) => {
    
    
    //给另一端转发消息
    socket.to(room).emit('message', message);

  });

  //收到 join 消息
  socket.on('join', (room) => {
    
    
    var o = io.sockets.adapter.rooms[room];
    //得到房间里的人数
    var nc = o ? Object.keys(o.sockets).length : 0;
    if (nc < 2) {
    
     //如 果 房 间中 没 有 超 过 2 人
      socket.join(room);
      //发 送 joined消 息
      socket.emit('joined', room);
    } else {
    
     // max two clients
      socket.emit('full', room); //发 送 full 消 息
    }
  });
})

すべてのメッセージ処理は、クライアントがサーバーとの接続を確立した後に実行されるため、接続メッセージの処理関数は、事前に socket.io に登録する必要があります。

   io.sockets.on('connection', (socket) => {
    
    
   	//收到message时,进行转发
  	socket.on('message', (message) => {
    
    
  
   		//给另一端转发消息
  		socket.to(room).emit('message', message);
  	});
  
  	//收到 join 消息
   	socket.on('join', (room) => {
    
    
  	var o = io.sockets.adapter.rooms[room];
  
  	//得到房间里的人数
  	var nc = o ? Object.keys(o.sockets).length : 0;
  	if (nc < 2){
    
     //如 果 房 间中 没 有 超 过 2 人
  		socket.join(room);
  
 		//发 送 joined消 息
  		socket.emit('joined', room);
  	} else {
    
     // max two clients
 		socket.emit('full', room); //发 送 full 消 息
   	}
  }
 });

サーバーはメッセージ メッセージを受信すると、処理を行わずに直接転送します。
参加メッセージの場合は、まずサーバーが管理するルームにユーザーを追加してから、クライアントに参加メッセージを返します。
ユーザーがルームに参加するときに既に 2 人のユーザーがいる場合は、ユーザーの参加を拒否し、ルームが満員であることを知らせる完全なメッセージを返します。

おすすめ

転載: blog.csdn.net/qq_40850839/article/details/127972514