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消息,以告之目前房间里人已经满了,如果有其他的需求可以自行监听其他的事件进行操作。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端御书房

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值