当前位置: 首页 > Web前端 > HTML5

webRTC.io---服务器端带你进入即时通讯的世界——从使用到完整的逐行源码解析

时间:2023-04-05 11:00:09 HTML5

什么是webRTC技术?WebRTC,其名称来源于WebReal-TimeCommunication(英文:WebReal-TimeCommunication)的缩写,是一种支持网络浏览器进行实时语音或视频对话的API。2011年6月1日开源,并在Google、Mozilla、Opera的支持下被纳入万维网联盟的W3C推荐标准。顾名思义,webRTC.ioserver就是Node.js服务端的代码,配合客户端代码才能实现真正的webRTC。本文只分析服务端的webRTC源码。首先我们来看一下webRTC.io的使用。将server对象传入webrtc.io的listen方法,就可以得到webRTC对象了~**进入webrtc.io库,发现里面只有一个index.js文件,很简单~**根据传入的server对象,创建一个websocket服务,调用attachEvents后,返回这个websocket的实例对象。我们看到attachEvents接受一个manager,也就是websocket的一个实例对象作为参数**,然后给websocket实例挂载事件,因为websocket继承了Node.jsEvent模块中的自定义,有ondata、onclose、onmessage等事件.将rtc中的属性sockets初始化为空数组。每次连接一个socket对象,保存handle对象,然后调用socket.send写入内核缓冲区数据,然后根据tcp的Nagle算法,及时推送数据给客户端。id()是生成唯一id属性的函数,类似于UUID。既然每个socket都有一个唯一的id属性,那么我们就需要定义一个id来查找这个socket句柄对象的功能,使用遍历sockets数组的方法。由于即时通讯是双工通信,双方都需要定义自己的一套实现协议,如事件名称、数据、两端的处理条件等。所以这里也可以提前定义好对应的事件处理~每次数据传输的时候把事件名塞进去~这样一开始就提前定义好自定义的事件回调,那么接收到事件就会触发对应的事件数据回调,传入socket句柄对象和payload数据。下面逐行分析加入聊天室的触发回调源码:1、获取传过来的数据,看里面有没有房间名对应的房间。如果没有,则生成一个Empty数组,并在其中添加socket句柄(方便后面push遍历整个房间,一个一个调用sokcet.send向这个长链接的client发送数据),挂载到rtc对象的rooms属性下对应的房间名,例如:rtc.rooms.cxk=[cxk1,cxk2,cxk3]以后遍历rtc.rooms时,使用item.send()发送到房间Everyone推送数据3.向当前发起加入这个房间的sockethandle对象写入数据,并通知他加入成功,加入的房间有哪些socket.id,每个id在server端存储一个sockethandle对象,一种类似于sessionId的key-value映射关系。**至此,总共800个字符,完整分析了整个webRTC.ioserver库。下一篇文章将带大家逐行分析进入客户端源码。欢迎点我在看,原创不易,谢谢支持**