webRTC技术是什么? web
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对象~websocket
**进入webrtc.io这个库,发现里面只有一个index.js文件,这就好办~
**session
根据传入的server对象,建立websocket服务,并调用attachEvents后,返回这个websocket的事例对象socket
咱们看attachEvents接受一个manager即websocket的实例对象为参数**tcp
而后给websocket实例挂载事件,由于websocket在Node.js中继承了自定义事件模块,具备ondata,onclose,onmessage等事件函数
在rtc中初始化一个属性sockets为空数组,每次有socket对象链接,那么就把句柄对象保存起来,之后调用socket.send就能够往内核缓冲区写入数据,再根据tcp的Nagle算法,适时推送数据给client端spa
id()是一个生成惟一id属性的函数,相似UUID
既然每一个socket都有了一个独一无二的id属性,那么咱们须要定义一个根据id找到这个socket句柄对象的函数,这里使用的是遍历sockets数组方式
即时通信因为是双工通信,须要两边定义好本身的一套实现协议,例如事件名称,数据,而后两端的分别处理状况。 因此这里也能够提早定义好对应的事件处理~ 事件名称在每次传输的数据过程当中就塞进里面~
像这样一开始就提早定义好了自定义事件回调,那么接受到数据后就会触发对应的回调,而且传入socket句柄对象和payload载荷数据
下面是一个加入聊天房间的触发回调
源码逐行解析:
1、拿到传输的data数据,看里面是否有房间名对应的房间,没有的话生成一个空数组,而且把把加入的这个socket句柄添加进去(方便后期整个房间进行推送,遍历,逐个调用sokcet.send便可向这个长连接的客户端发送数据)
2、保存这个房间全部socket句柄对象集合,挂载到rtc对象的rooms属性下的对应房间名下,例如:rtc.rooms.cxk = [cxk1,cxk2,cxk3] 等未来遍历rtc.rooms时候,使用item.send()便可向房间里全部人推送数据
3、向当前发起加入这个房间的socket句柄对象写入数据,通知他加入成功,加入的房间里面有哪些socket.id , 每一个id都在服务端存储着socket句柄对象,一种key-value映射关系,相似sessionId.
**到此,一共800字,就完整解析了整个webRTC.io的服务端库,下篇文章将带你们走进客户端源码逐行解析,欢迎帮忙点个在看,原创不易,谢谢支持
**