WebRTC学习总结(2):Nodejs和socket.io搭建信令服务器

信令服务器

webRTC采用的是“端对端”对等连接,在信息通路形成之后,可以没有服务器参与,但是信息通路的搭建不能没有信令服务器。

信令服务器主要用于交换以下信息:

  • 会话控制信息:比如加入房间,离开房间,禁言,错误等信息。
  • 媒体信息:中转通过SDP来表示的offer,answer信息,如如各自的音视频解码方式,带宽等。
  • 网络信息:通过信令服务器“发现”参与P2P连接的两个webRTC客户端。首先将由一端将网络相关信息传到信令服务器,服务器帮它交换到对端,对端拿到你的信息后,若在同一局域网内,直接通过P2P传输;若不在,首先进行P2P穿越,看是否能打通,打通则传输,打不通则中转等。

Nodejs和socket.io

其实,在服务器的选择方面,有许多成熟好用的web服务器可以使用。Nodejs 现在是非常流行的Web服务器,选择Nodejs的主要原因是安装快捷,同时可以使用JS语言开发服务器程序,非常适合新手。

socket.io是一个基于Nodejs的库,在现有的Node Server上引入socket.io即可使用。socket.io特别适合用来开发WebRTC的信令服务器,通过它来构建信令服务器特别的简单,这主要是因为它内置了房间 的概念。

上图是socket.io与Nodejs配合使用的逻辑关系图。可以看到,socket.io分为服务端和客户端两部分。
服务端由Nodejs设置侦听某个服务端口。客户端要想与服务端相连时,首先要加载socket.io的客户端库,通过调用 io.connect();就与服务端连上了。

需要特别强调的是 socket.io 消息的发送与接收。socket.io 有很多种发送消息的方式,其中最常见的有下面几种:

  • 给本次连接发消息: socket.emit()

  • 给某个房间内所有人发消息: io.in(room).emit()

  • 除本连接外,给某个房间内所有人发消息: socket.to(room).emit()

  • 除本连接外,给所有人发消息: socket.broadcast.emit()

消息的接受也非常简单:

  • 发送 command 命令:
发送端: socket.emit('cmd’);
接收端: socket.on('cmd',function(){...});
  • 发送一个 command 命令,带 data 数据
发送端: socket.emit('action', data);
接收端: socket.on('action',function(data){...});
  • 发送了command命令,还有两个数据
发送端: socket.emit(action,arg1,arg2);
接收端: socket.on('action',function(arg1,arg2){...});

信令服务器的搭建

接下来我们来看一下,通过 Nodejs + socket.io 构建的一个服务器。

首先是客户端的HTML代码,这个客户端页面非常简单,就只有两个视频框用来显示本地和远端的媒体流。注意这里在<script>标签里引入了JS文件,
其中,socket.io.js 是用来与服务端建立 socket 连接的,adapter-latest.js是用于解决webRTC中不同浏览器之间的适配的问题的,main.js是自己写的一些业务逻辑,可以通过socket与服务端通讯。

<!-- index.html -->
<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>Realtime communication with WebRTC</title>
    <link rel="stylesheet" href="css/main.css"/>
</head>

<body>
<h1>Realtime communication</h1>
<div id="videos">
    <video id="localVideo" autoplay muted playsinline></video>
    <video id="remoteVideo" autoplay playsinline></video>
</div>

<!-- This file is automatically added/served when running "node index.js". -->
<script src
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值