HTML5 - websocket的应用 之 简易聊天室
需要知识点:
- 前端知识
- jq操作dom
- nodejs
- socket.io
关于websocket api的知识点,见上篇章《HTML5-Websocket》。
聊天室思路/原理:
A和B聊天:
- A发送消息到中间“聊天服务器”,
- 服务器发送消息给B
- 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实现一个网页版的微信聊天工具》 尽请期待~
HTML5 - websocket的应用 之 简易聊天室的更多相关文章
- html5 websocket + node.js 实现网页聊天室
1 client: socket.io server: node.js + express + socket.io 一个简单的聊天室 demo,没有注册,内置了一些测试用户 2 cli ...
- php+websocket搭建简易聊天室实践
1.前言 公司游戏里面有个简单的聊天室,了解了之后才知道是node+websocket做的,想想php也来做个简单的聊天室.于是搜集各种资料看文档.找实例自己也写了个简单的聊天室. http连接分为短 ...
- node.js+websocket实现简易聊天室
(文章是从我的个人主页上粘贴过来的,大家也可以访问我的主页 www.iwangzheng.com) websocket提供了一种全双工客户端服务器的异步通信方法,这种通信方法使用ws或者wss协议,可 ...
- node+websocket创建简易聊天室
关于websocket的介绍太多,在这就不一一介绍了,本文主要实现通过websocket创建一个简易聊天室,就是90年代那种聊天室 服务端 1.安装ws模块,uuid模块,ws是websocket模块 ...
- 基于Node.js + WebSocket 的简易聊天室
代码地址如下:http://www.demodashi.com/demo/13282.html Node.js聊天室运行说明 Node.js的本质就是运行在服务端的JavaScript.Node.js ...
- Django中使用websocket并实现简易聊天室
django使用websocket并实现简易聊天室 django默认只支持http协议 如果你想让django即支持http协议又支持websocket协议,则需要做以下配置 前期配置 前提需要安装c ...
- php websocket-网页实时聊天之PHP实现websocket(ajax长轮询和websocket都可以时间网络聊天室)
php websocket-网页实时聊天之PHP实现websocket(ajax长轮询和websocket都可以时间网络聊天室) 一.总结 1.ajax长轮询和websocket都可以时间网络聊天室 ...
- Express+Socket.IO 实现简易聊天室
代码地址如下:http://www.demodashi.com/demo/12477.html 闲暇之余研究了一下 Socket.io,搭建了一个简易版的聊天室,如有不对之处还望指正,先上效果图: 首 ...
- 使用WebSocket实现简单的在线聊天室
前言:我自已在网上找好了好多 WebSocket 制作 在线聊天室的案列,发现大佬们写得太高深了 我这种新手看不懂,所以就自已尝试写了一个在线简易聊天室 (我只用了js 可以用jq ) 话不多说,直接 ...
随机推荐
- 转: 彻底理解 Spring 容器和应用上下文
本文由 简悦 SimpRead 转码, 原文地址 https://mp.weixin.qq.com/s/o11jVTJRsBi998WlgpfrOw 有了 Spring 之后,通过依赖注入的方式,我们 ...
- ReentrantLock的实现原理及AQS和CAS
AQS,即AbstractQueuedSynchronizer, 队列同步器,它是多线程访问共享资源的同步器框架,Java中的ReentrantLock/Semaphore/CountDownLatc ...
- OCC与MVCC 的区别
一.前言 在数据库中,并发控制是指在多个用户/进程/线程同时对数据库进行操作时,如何保证事务的一致性和隔离性的,同时最大程度地并发. 当多个用户/进程/线程同时对数据库进行操作时,会出现3种冲突情形: ...
- Appium+python自动化(五)- 模拟器(超详解)
简介 Appium是做安卓自动化的一个比较流行的工具,对于想要学习该工具但是又局限于或许当前有些小伙伴没 android 手机来说,可以通过安卓模拟器来解决该问题,下面就讲解使用appium连接安卓模 ...
- API管理之YApi实现前后端高度分离
全手打原创,转载请标明出处:https://www.cnblogs.com/dreamsqin/p/11972789.html,多谢,=.=~ 背景描述 前后端分离已成为互联网项目开发的业界标准使 ...
- 【linux】linux修改文件句柄数量,linux文件句柄的修改分为用户级和系统级
说明: liunx中文件句柄有两种,一种是用户级的,一种是系统级的 文件句柄限制,就是规定的单个进程能够打开的最大文件句柄数量(Socket连接也算在里面,默认大小1024) 1 用户级的修改 1.1 ...
- LearnOpenGL笔记(1)搭建环境
之前有写过Unity Shader,但不过是东拼西凑,对其中的原理可以说完全不清楚,现在准备好好从opengl开始,学习这基础又重要的内容. LearnOpenGL CN是一个超超超炒鸡好的openG ...
- Javascript屏蔽Backspace回退页面
允许对输入框密码框等控件删除字符,但是不允许页面进行回退 <html lang="en" xmlns="http://www.w3.org/1999/xhtml&q ...
- webuploader-异步切片上传(暂不支持断点续传)及 下载方法!C#/.NET
十年河东,十年河西,莫欺少年穷 学无止境,精益求精 进入正题: 关于webuploader,参考网址:https://fex.baidu.com/webuploader/: 本篇博客范例下载地址:ht ...
- elasticsearch安装中文分词器插件smartcn
原文:http://blog.java1234.com/blog/articles/373.html elasticsearch安装中文分词器插件smartcn elasticsearch默认分词器比 ...