这篇文章主要介绍了 WebRTC 聊天室设计和搭建,主要包括信令服务器及客户端网页设计。

WebRTC 教程一:WebRTC信令、架构和 API 入门

WebRTC 教程二:WebRTC API 和 Leak

WebRTC 教程三:WebRTC特性,调试方法以及相关服务器搭建方法

目录

  • WebRTC 聊天室:设计

  • WebRTC 聊天室:信令服务器

  • WebRTC 聊天室:客户端部署

WebRTC 聊天室:设计

讲者首先介绍了要搭建 WebRTC 聊天室所需要的编程语言。对于客户端,当然应该部署在浏览器上,就选用 HTML 和 CSS 作为前端开发工具,如果想要更进一步的 UI 框架就可以选择 BootStrap,前端逻辑就可以使用 JavaScript。

对于剩下的服务端而言,信令服务器,根据前面提到的,我们可以使用 Node.JS 来作为服务端应用。

对于聊天室的一些功能,列举如下:

  • 用户可以登录;

  • 可以保持在线用户名单;

  • 用户可以请求聊天;

  • 所有用户都就绪后,就开始创建聊天室;

  • 用户可以退出聊天室;

  • 仅一对一聊天;

  • 仅文本和表情;

  • 用户可以退出。

讲者接着介绍了对于搭建聊天室,会需要用到哪些 WebRTC 功能或 API:

  • 只要用户登录并请求聊天室,就会有一个 RTCPeerConnection;

  • 对于数据传输,用户需要创建 RTCDataChannel;

  • 用户需要通过信令服务器交换 sdp 请求和答复,以及 ICE 信息。

讲者设计了一个聊天室的简要流程框图:

其中可以看到,NodeJS WebSocket 正在监听用户请求并返还回应,这个 NodeJS 服务器的主要责任是支持 WebRTC 信令。

WebRTC 聊天室:信令服务器

讲者首先介绍了信令服务器的代码:

服务端会接收来自客户端的请求并返回答复。如果用户刷新了页面或是关闭了页面,服务器就会移除用户,如果该用户还希望继续使用应用则需要重新登陆一次。首先创建一个 WebSocket 从客户端监听请求。在线用户列表使用 map 来储存。客户端可以通过 WebSocket 来连接服务端,json 信息用于登录或登出。服务端首先要检查客户端的信息是 json 还是一个普通的信息,来判断是登录信息还是只是一个发送的信息内容。一旦连接建立好,客户端就需要把带有用户登录信息的 json 发送给服务端,服务端就会回复成功或失败。之后服务端就会记录在用户在线名单上,最后把在线用户名单发送给所有的在线用户。

如果一个用户请求聊天室,服务端首先检查用户是否存在登录,然后就需要检查另一个用户的用户状态,并返回成功或失败。基于此服务端会令用户发送请求给另一个用户。此后,用户会根据情况选择是否接收并返还答复,服务器再将答复转发给用户。答复类型包含如下:

  • 如果用户的答复类型为"busy",则服务器认为用户拒绝了请求。

  • 如果答复类型为"answer",则服务器认为用户准备好加入聊天室。

  • 如果用户答复类型为"candidate",服务器会接收用户发的 ICE 内容并转发给另一用户。

  • 如果用户答复类型为"ready",则服务器认为用户准备好了,服务器会向每个用户发送聊天室准备好的信息。在用户进入聊天室后,就会被服务器标记为"busy",也就不能请求或答复聊天。

  • 如果答复类型为"leave",服务器就会了解此用户请求退出聊天室。

  • 如果答复类型为"quit",则服务器会认为此用户已退出并更新用户名单。

  • 本文福利, 免费领取C++音视频学习资料包、技术视频/代码,内容包括(音视频开发,面试题,FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,编解码,推拉流,srs)↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓

WebRTC 聊天室:客户端部署

讲者首先展示了这个客户端 demo,在两个页面中可以各使用一个用户名登录,之后可以选择用户并向其发送通话请求,另一方可以选择收到或拒绝,在通话时,可以点击右上角 leave 来退出聊天。

讲者会使用 HTML 和 JavaScript 来开发客户端应用。首先讲者介绍了 HTML 来写应用页面,写一个 HTML 页面,使用不同的分区来实现登录页面和通话页面。

讲者写了一个 html 文件并命名为 index.html,在页面中加入了 head 和 body 部分,可以在 head 部分导入所需要的包。在 body 部分,使用了三个分区来分别设计登录页面,用户页面和用户聊天页面。可以通过使用 JavaScript 来控制这些分区的显示。

然后讲者展示了 Javascript 完成的这个页面的逻辑设计:

在客户端,需要连接到信令服务器。当用户名输入完毕后,用户名就需要发送到服务器确认,如果登录成功,服务器会发送返回"server_login",而如果服务器返回了"false",则说明相同的用户名已经被使用,需要换一个名字。

如果一个用户登录了,则服务器需要向所有用户同步该用户的上线信息。如果一个用户点击了另一个用户,则需要向服务器发送建立聊天的请求"wang_to_call",如果对端用户在线且有空,则会显示出请求聊天的页面,并建立 RTC 连接。为了建立 ICE 连接,首先需要添加 STUN 和 TURN 服务器名。之后就可以通过 RTCPeerConnection API 创建 WebRTC 连接。接下来通过 Create_DataChannel API 函数创建 RTCDataChannel,你可以根据需求来设置你的 DataChannel 参数。DataChannel 建立完毕后,还需要为其设置回调函数,如报错,收到信息,打开和关闭 channel 等。之后根据客户端请求建立 SDP 请求,最后创建 WebRTC 答复。最后在两个用户都发送了"ready"答复后,就可以开始创建聊天室,并将两个用户的状态都设置为"busy"。

本文福利, 免费领取C++音视频学习资料包、技术视频/代码,内容包括(音视频开发,面试题,FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,编解码,推拉流,srs)↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓

WebRTC 教程四: WebRTC聊天室设计和搭建相关推荐

  1. php聊天室的设计实现,基于PHP+MySQL的聊天室设计

    MySQL并发能力强.响应速度快,是性能优异的数据库软件:PHP是功能强大的服务器端脚本语言.笔者在网站开发中,采用PHP4.0+MySQL3.23.38建立了多种应用.下面,以一个简单的聊天室设计为 ...

  2. Java+Netty+WebRTC、语音、视频、屏幕共享【聊天室设计实践】

    背景 本文使用webtrc实现了一个简单的语音视频聊天室.支持多人音视频聊天.屏幕共享. 环境配置 音视频功能需要在有Https协议的域名下才能获取到设备信息, 测试环境搭建Https服务参考Wind ...

  3. QT 网络聊天室设计实验报告

    一.实验目的与要求 (1)了解QT Network模块基本知识 (2)掌握网络访问接口的方法 (3)熟悉获取网络接口信息的方法 二.实验内容与安排方式 (1)了解QT Network模块基本知识 (2 ...

  4. java聊天室报告ppt_基于JavaWeb聊天室设计与实现毕业论文+任务书+中期表+中期报告+项目源码+数据库+答辩PPT...

    摘 要 Web聊天室曾在因特网进入中国早期的时候被广泛使用,一度深受国内网民的青睐.随着腾讯QQ以及之后微信的普及,目前Web聊天室已然较少被使用.但在一些商业网站,例如BBS以及在线购物系统,还是会 ...

  5. Firebase 教程 —— 一个实时聊天室

    原文链接 : Firebase Tutorial: Real-time Chat 原文作者 : David East 译者 : kmyhy 现在主流的 App 都开始支持聊天功能了--你的 App 是 ...

  6. linux点对点聊天室的实现与设计心得,基于Socket接口的Linux与Windows网络聊天室设计与实现...

    陈洁 孟晓景 摘要:为了实现Linux与Windows跨平台通信,及时共享信息,构建了一个适用于跨平台的网络聊天室通信程序.先搭建跨平台通信环境,然后使用Socket套接字网络编程接口实现通信.整个系 ...

  7. python聊天室设计_如何使用 Python 开发一个聊天室?

    ​接下来我们就使用 Python 来操作 socket ,实现一个聊天室的一些主要功能.首先我们来回想下,一般的聊天室都是怎样的,有多个用户可以同时在线,他们可以实时获取到消息,实时发送消息. 服务端 ...

  8. python界面编程和网口通信_基于python的GUI聊天室设计

    " 套接字 " ,用于描述 IP 地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之 间的通信.在 Internet 上的主机一般运行了多个服务软件,同时提供几种 ...

  9. ABP入门教程(四)初探领域驱动设计

    ABP项目的分层 .Application 为应用层:构建服务 .Core 为领域层:定义实体,定义实体功能,实现实体功能,定义仓储接口 .EntityFrameworkCore 为数据库处理(EF层 ...

最新文章

  1. Python 的运算符
  2. [阿里云]I+的一些探索
  3. 划分数据集代码(按照4:1的比例)以及根据各自文件名写入txt文件
  4. 如何在html文件中包含其他html文件
  5. 给ListView视图添加行号
  6. 小程序向webview传参_微信小程序(1)——web-view和小程序间传递参数、发送消息...
  7. 华为onu 调为交换机_华为onu命令及操作步骤
  8. MySQL 数据库简介
  9. 北京程序员平均工资达2万!你拖后腿了吗?
  10. 专业技术问题:UI设计师岗位面试反馈的常见问题
  11. vue Emitter
  12. leetcode 5473. 灯泡开关 IV(C++)
  13. 遥测、遥信、遥控、遥调的简要说明
  14. ADS 常见问题及解决方法
  15. Qualcomm 处理器 Krait架构
  16. sas与matlab区别,SAS与MATLAB软件应用教学大纲
  17. brew 一直等待_等待幸福作文小学生5篇2020年
  18. 合并报表编制采用的理论_合并报表编制理论知识(必读)
  19. 【STM32F10系列实操笔记】系统时钟的配置
  20. Java 后序遍历(递归、堆栈)

热门文章

  1. LDAP 和 LDAP3 的对比、接口调用(1)
  2. QPST 2.7.460 高通产品专用支持套件 (Qualcomm Product Support Tools)
  3. 安全计算:AntiVir Personal Edition提供免费病毒防护
  4. i386 Linux内核进入保护模式引导流程
  5. 80x86 汇编语言编程:判定数据序列的奇偶个数
  6. 【数字经济】NBA+大数据,数字经济重塑体育帝国!
  7. JavaScript实现垃圾分类小游戏教程,附源码!
  8. 山世光:计算机视觉技术现状展望和产业化
  9. 降本增效背后,“现代牧业”们要做好持久战准备
  10. geni与ancestry分析