9

​webRTC技术是什么?

WebRTC,名称源自网页即时通信(英语:Web Real-Time Communication)的缩写,是一个支持网页浏览器进行实时语音对话或视频对话的API。它于2011年6月1日开源并在Google、Mozilla、Opera支持下被纳入万维网联盟的W3C推荐标准。


顾名思义就是,webRTC.io  server 就是Node.js服务端的代码,配合client端代码即可实现真正端webRTC~ 本文只解析服务端的webRTC源码

首先看看webRTC.io的使用

其他先不要看,先看使用,往webrtc.io的listen方法中传入server对象,即可得到webRTC对象~

**进入webrtc.io这个库,发现里面只有一个index.js文件,这就好办~
**

根据传入的server对象,创建websocket服务,并调用attachEvents后,返回这个websocket的事例对象

我们看attachEvents接受一个manager即websocket的实例对象为参数**

然后给websocket实例挂载事件,因为websocket在Node.js中继承了自定义事件模块,具有ondata,onclose,onmessage等事件

在rtc中初始化一个属性sockets为空数组,每次有socket对象连接,那么就把句柄对象保存起来,以后调用socket.send就可以往内核缓冲区写入数据,再根据tcp的Nagle算法,适时推送数据给client端

id()是一个生成唯一id属性的函数,类似UUID

既然每个socket都有了一个独一无二的id属性,那么我们需要定义一个根据id找到这个socket句柄对象的函数,这里使用的是遍历sockets数组方式

即时通讯由于是双工通讯,需要两边定义好自己的一套实现协议,例如事件名称,数据,然后两端的分别处理情况。  所以这里也可以提前定义好对应的事件处理~ 事件名称在每次传输的数据过程中就塞进里面~

像这样一开始就提前定义好了自定义事件回调,那么接受到数据后就会触发对应的回调,并且传入socket句柄对象和payload载荷数据

下面是一个加入聊天房间的触发回调

源码逐行解析:

一、拿到传输的data数据,看里面是否有房间名对应的房间,没有的话生成一个空数组,并且把把加入的这个socket句柄添加进去(方便后期整个房间进行推送,遍历,逐个调用sokcet.send即可向这个长链接的客户端发送数据)

二、保存这个房间所有socket句柄对象集合,挂载到rtc对象的rooms属性下的对应房间名下,例如:rtc.rooms.cxk  =  [cxk1,cxk2,cxk3]  等将来遍历rtc.rooms时候,使用item.send()即可向房间里所有人推送数据

三、向当前发起加入这个房间的socket句柄对象写入数据,通知他加入成功,加入的房间里面有哪些socket.id , 每个id都在服务端存储着socket句柄对象,一种key-value映射关系,类似sessionId.

**到此,一共800字,就完整解析了整个webRTC.io的服务端库,下篇文章将带大家走进客户端源码逐行解析,欢迎帮忙点个在看,原创不易,谢谢支持
**


PeterTan
14.4k 声望30k 粉丝