HTML5 - websocket的应用 之 简易聊天室

 需要知识点

  • 前端知识
  • jq操作dom
  • nodejs
  • socket.io

 

关于websocket api的知识点,见上篇章《HTML5-Websocket》。

 

聊天室思路/原理

A和B聊天:

  1. A发送消息到中间“聊天服务器”,
  2. 服务器发送消息给B
  3. B接收A的消息,实现第一次消息传输

 B再给A回消息的原理同上三步骤

 

其中原始HTTP协议和H5新增Websocket协议不同的地方在于:

“服务器发送消息给B”这里。

 

HTTP协议中,服务器是基于“请求响应的一个模型的 。也就是说,服务器无法主动发送消息给客户端,他必须接收一个请求才能响应。

因此传统HTTP协议要想实现聊天室就必须客户端实时的(比如每秒1次)发送ajax轮询请求,如果服务器有消息需要返回就会响应,如果没有就是空轮询。

一次请求后,链接断开,下次再需要获取最新消息,还需要重新发送请求。这样来看,毫无疑问是耗费性能、浪费带宽。

 

在H5新增的Websocket协议中,实现服务器和客户端全双工的通信方式,两台机器之间只要握手成功(建立连接)后,就可以互相主动给对方发送消息。

就像我们现实中两个人聊天一样了。谁有话谁开口。

 

“聊天室”具体实现步骤:

初步应用代码见上篇 HTML5 - 开发一个自己的websocket服务器》,主要记录了websocket怎么启动一个本地服务并应用的。

在之前代码的基础上,新增聊天室该有的广播内容、以及新增消息的append功能。
 

要实现聊天室,得需要以下三个主要功能

1、 新人进入聊天室,服务器广播发送给大家“xx进入聊天室”

2、某人离开聊天室,服务器广播发送给大家“xx离开聊天室”

3、某人发送消息到聊天室,服务器广播发送给大家“xx:xx发送的消息”

 

综上所述,核心之处就是需要实现:广播

 

要做到广播,就需要server.connections

这个数组记录了所有连接到websocket服务器的用户(也就是进入聊天室的人),通过遍历这个数组,然后给数组中每个连接进来的用户对象发送消息即可。

 

源码如下地址:

聊天室源码

 

 

 

 聊天室效果如下:

三个标签页 - 模拟三个人进入了聊天室

 

聊天内容截图:

 

 

 

以上,来自腾讯课堂课程学习笔记。

腾讯课堂地址https://ke.qq.com/course/355307

 

 

下篇:《socket.io实现一个网页版的微信聊天工具》 尽请期待~

 

posted @   xing.org1^  阅读(5100)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示