十一、信令服务器原理

信令服务器作用

没有信令服务器,各个WebRTC之间是没办法通信的。
传递媒体数据有两个信息,必须经过信令服务器进行交换

一、媒体信息

通过SDP来表示,如编解码器是什么?是否支持音频视频?编码方式是什么?等
这些信息是通过SDP协议描述出来,通过信令服务器中转的

二、网络信息

两个WebRTC客户端会尽可能选择P2P进行连接,那么进行连接前是如何发现对方的?就是通过信令服务器。
首先将你所有网络相关信息传到信令服务器,服务器帮你交换到对端,对端拿到你的信息后,
若在同一局域网内,直接通过P2P传输;若不在,首先进行P2P穿越,看是否能打通,打通则传输,打不通则中转等。

三、具体业务

还有一点也需要信令服务器进行传输,比如加入房间,离开房间,禁言等功能

使用socket.io的原因

一、socke.io是 WebRTC超集,它本身就有WebSocket功能

在传输时,一般有两种协议 TCP和 UDP
底层协议使用 UDP主要用于流媒体传输(音频视频)还有文本,文字聊天等,但 UDP是不可靠传输,是可以丢包的,当然音频视频是可以丢包的,丢失一帧只会卡顿下,还可以继续工作。
但信令服务器不能丢失数据,所有的包必须保证到达,否则断开连接,所以信令服务器一般使用TCP可靠性传输。
websocket底层使用的就是 TCP协议, socket.io 使用的也是TCP

二、socket.io本身就有房间的概念,不用自己再写一个ROOM服务器

在websocket官方中,是有三个服务器的,ROOM服务器(提供用户进出房间服务)、信令服务器、流媒体(中转)服务器
选用socket.io 即不用单独写ROOM服务器,这里ROOM和信令是同一个服务器

三、socket.io 跨平台、跨终端、跨语言

socket.io工作原理

socket.io是一个基于Nodejs的库,在现有的Node Server上增加个socket.io即可

在任何终端都可以引入socket.io客户端的库,通过客户端的库就可以连接到 Nodejs中 socket.io服务器上
这样就可以建立连接,然后就可以创建,加入房间,这样房间内的人就可以通信了

多个 socke.io可以串行通信。

你可能感兴趣的:(十一、信令服务器原理)