前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >webRTC.io --- Server端 带你走进即时通讯世界 - 从使用到完整逐行源码解析

webRTC.io --- Server端 带你走进即时通讯世界 - 从使用到完整逐行源码解析

作者头像
Peter谭金杰
发布2020-05-09 17:29:59
4980
发布2020-05-09 17:29:59
举报

​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的服务端库,下篇文章将带大家走进客户端源码逐行解析,欢迎帮忙点个在看,原创不易,谢谢支持 **

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
即时通信 IM
即时通信 IM(Instant Messaging)基于腾讯二十余年的 IM 技术积累,支持Android、iOS、Mac、Windows、Web、H5、小程序平台且跨终端互通,低代码 UI 组件助您30分钟集成单聊、群聊、关系链、消息漫游、群组管理、资料管理、直播弹幕和内容审核等能力。适用于直播互动、电商带货、客服咨询、社交沟通、在线课程、企业办公、互动游戏、医疗健康等场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档