WebRTC信令服务器的搭建

WebRTC简介中提到信令服务器用于向中端传输数据,信令服务器是实现两个webRTC中端通信的重要角色。今天就来实现一下信令服务器。

作为前端开发对于后端的东西不是很熟悉,只能使用现成的一些服务器软件和nodejs来搭建信令服务器。

业务逻辑

当两个用户要进行通信时,他们首先要创建一个房间,成功加入房间之后,双方才能交换必要的信息。

当通信的双方结束通话后,用户需要发送离开房间的消息给信令服务器,此时信令服务器需要将房间内的所有人清除;如果房间里已经没有人了,还需要将空房间销毁掉。

这样的逻辑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 消 息
    }
  });
})

所有消息的处理都是在客户端与服务器建立连接之后进行的,因此,需要提前将connection消息的处理函数注册到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 消 息
   	}
  }
 });

如果服务端收到message消息,它不做任何处理,直接进行转发。
如果是join消息,则首先将用户加入服务端管理的房间中,之后向客户端返回joined消息。
如果用户加入时房间里已经有两个用户了,则拒绝该用户的加入,并返回full消息,以告之目前房间里人已经满了,如果有其他的需求可以自行监听其他的事件进行操作。

猜你喜欢

转载自blog.csdn.net/qq_40850839/article/details/127972514