Web在线聊天室(2) --- 技术实现原理
技术实现原理
- 实现技术原理
- (一)Session
- (二)Ajax 技术
- (三)消息推送
- 轮询方式
- 长轮询
- 长连接
- webSocket
- 此项目中的webSocket
实现技术原理
(一)Session
同一个浏览器,即便有多个标签页,也是保存相同的session
session生命周期:
(1)登录系统没有注销
(2)没有超时
原理:session基于cookie实现的
作用:解决未登录敏感资源的访问问题(更安全)
代码:
[登陆时:账号密码验证通过后 request.getSession(); //默认是true ]
[登录之后,都可以获取到Session对象 ]
怎么用两个账号登录,分别发送消息呢?
一个用谷歌浏览器,一个用别的浏览器,因为会话信息会保存在客户端中(也就是浏览器当中),所以换一个浏览器打开也就是换了一个客户端,这样不同浏览器保存的会话信息不同,则就是两个用户
(二)Ajax 技术
主要原理:异步请求回调
URL:http:// ip 或 域名 : port 端口号 / 应用上下文路径 / 服务路径
接口api设计
请求:
POST /login
{
name: xxx,
password: xxx
}
响应:
HTTP/1.1 200 OK
{
ok: 1,
reason: xxx,
userId: xxx,
name: xxx,
nickName: xxx,
signature: xxx
}
- 根据api设计的请求数据发送给后端
- 通过接口找到后端的servlet,并执行service方法
- 根据api响应信息的字符串用json反序列换为对象,随后发送ajax的异步回调函数
(注意:这里的回调函数并不是一直在等后端执行完所有的业务程序才继续走回调函数,而是可以在等待期间可以做其他事情,回调函数来了再去执行就好,类似多线程)
(三)消息推送
服务端主动给客户端发送消息,就比如登录某个网页,会弹出来小广告,这就是服务器自动给客户端发送的消息
对于HTTP的方式实现消息推送时,有以下几种方式:
轮询方式
客户端定时向服务端发送ajax请求,服务器接收到请求后马上返回消息并关闭连接。
优点:后端程序编写比较容易。
缺点:TCP的建立和关闭操作浪费时间和带宽,请求中有大半是无用,浪费带宽和服务器资源。
实例:适于小型应用。
长轮询
客户端向服务器发送Ajax请求,服务器接到请求后hold住连接,直到有新消息才返回响应信息并关闭连接,客户端处理完响应信息后再向服务器发送新的请求。
优点:在无消息的情况下不会频繁的请求,耗费资源小。
缺点:服务器hold连接会消耗资源,返回数据顺序无保证,难于管理维护。
实例:WebQQ、Hi网页版、Facebook IM。
长连接
在页面里嵌入一个隐蔵iframe,将这个隐蔵iframe的src属性设为对一个长连接的请求或是采用xhr请求,服务器端就能源源不断地往客户端输入数据。
优点:消息即时到达,不发无用请求;管理起来也相对方便。
缺点:服务器维护一个长连接会增加开销,当客户端越来越多的时候,server压力大!
实例:Gmail聊天
webSocket
HTML5 WebSocket设计出来的目的就是取代轮询和长连接,使客户端浏览器具备像C/S框架下桌面系统的即时通讯能力,实现了浏览器和服务器全双工通信,建立在TCP之上,虽然WebSocket和HTTP一样通过TCP来传输数据,但WebSocket可以主动的向对方发送或接收数据,就像Socket一样;并WebSocket需要类似TCP的客户端和服务端通过握手连接,连接成功后才能互相通信。
优点:双向通信、事件驱动、异步、使用ws或wss协议的客户端能够真正实现意义上的推送功能。
缺点:少部分浏览器不支持。
实例:社交聊天(微信、QQ)、弹幕、多玩家玩游戏、协同编辑、股票基金实时报价、体育实况更新、视频会议/聊天、基于位置的应用、在线教育、智能家居等高实时性的场景。
举例总结几种方式:
比如钓鱼,现在有10个鱼竿
- 轮询方式:定时查看鱼竿
- 长轮询:依次查看每个鱼竿,查看时有鱼才继续
- 长连接:雇佣多个工人,每个工人都查看鱼竿
- websocket:每个鱼竿安装铃铛(事件驱动)
此项目中的webSocket
作用:做消息推送(服务端主动地向客户端发送消息),客户端保持和服务端的长连接
背景:消息推送实现方案
原理:
(1)基于http建立连接(保持,保存有双方通信的通行证)
(2)真正的传输数据时,传输层基于 TCP 协议,应用层为 WebSocket 协议(ws,wss)
Web在线聊天室(2) --- 技术实现原理相关推荐
- 【云原生之Docker实战】使用Docker部署Web在线聊天室Rocket.Chat
[云原生之Docker实战]使用Docker部署Web在线聊天室Rocket.Chat 一.Rocket.Chat介绍 二.检查本地系统环境 1.检查系统版本 2.检查docker版本 3.检查doc ...
- 基于Java语言的Web在线聊天室
在线聊天室 能够实现登录,注册,聊天功能,最终效果如下图所示 注册页面 <%@ page language="java" contentType="text/htm ...
- Web在线聊天室(6) --- login登录接口
目录 登录接口 接口设计文档 编写前端ajax回调函数 编写servlet实现dopost方法 编写操作数据库方法 实现结果 检测登录接口 接口设计文档 编写前端ajax回调函数 编写servlet实 ...
- 在线聊天JAVA后端_java web 在线聊天的基本实现
随着互联网的发展,http的协议有些时候不能满足需求,比如在现聊天的实现.如果使用http协议必须轮训,或者使用长链接.必须要一个request,这样后台才能发送信息到前端. 后台不能主动找客户端通信 ...
- html聊天室ui,震惊!这个H5居然是在线聊天室!(内附完整教程)
在社交为王的互联网时代下,在线聊天室的概念越来越火. 前阵子,微信朋友圈里的"好友印象"."在线1对1聊天"H5层出不穷,居然还刷了屏.这种H5通常会把两个/多 ...
- ASPNET使用Application实现在线聊天室
什么是application Application对象是HttpApplicationState类的一个实例,用于定义ASPNET应用程序中的所有应用程序对象所有的方法.属性和事件. HttpApp ...
- rudesocket如何使用_[WebSocket入门]手把手搭建WebSocket多人在线聊天室(SpringBoot+WebS...
前言 本文中搭建了一个简易的多人聊天室,使用了WebSocket的基础特性. 源代码来自老外的一篇好文: 本文内容摘要: 初步理解WebSocket的前后端交互逻辑 手把手使用 SpringBoot ...
- 云信小课堂|搭建应用级别在线聊天室,7步就够了!
Vol. 6 从2000年至今,聊天室一直活跃在人们的各种生活场景中,目前广泛运用于超级小班课.互动大班课.连麦开黑.主播 PK 等场景,还具备文本.表情.点赞.撒花等互动方式,架起沟通桥梁的同时,玩 ...
- 基于Server-Sent Event的简单在线聊天室
一.Web即时通信 所谓Web即时通信,就是说我们可以通过一种机制在网页上立即通知用户一件事情的发生,是不需要用户刷新网页的.Web即时通信的用途有很多,比如实时聊天,即时推送等.如当我们在登陆浏览 ...
最新文章
- IPsec ××× 配置實例
- mysql5.5.54语法_mysql 基础篇5(mysql语法---数据)
- 常见的时间复杂度函数
- html的语义化面试题,前端面试题-HTML结构语义化
- 该终端已停用_宣杭老线停用,勾庄、三墩、仓前、老余杭、瓶窑三千多亩地待开发...
- matlab 实现行程编码 对二值图像进行编解码
- BGP(边界网关协议)
- Windows10环境中下载DOSBox并进行debug配置
- win10间歇性闪屏_手把手解决win10系统一直闪屏的技巧
- HTML5基础学习(6):个人简历制作
- L298N电机驱动模块的接线使用与代码实现
- Creational patterns
- Paul Graham:如何做好天使投资
- 带掩码的自编码器(MAE)最新的相关论文推荐
- 花之语第五期:紫罗兰
- bugtraq mysql,Oracle MySQL Server远程安全漏洞(CVE-2017-3459)
- poj 3009 Curling 2.0
- hcia完结 静态路由综合实验
- 【CSS】模拟太阳系行星的公转
- 前端常用的几种加密方法
热门文章
- 致远SPM解决方案之安全管理
- Scala一种编程语言
- HDU 4460 Friend Chains(map + spfa)
- 图论总结(欧拉路+Floyd所有结点最短+Bellman-Ford算法+SPFA+Dijsktra算法+Tarjan算法+最小生成树(prim+kruskal) )
- 苹果、安卓ASO优化,aso安卓苹果(二)
- 安装php详细步骤,PHP开发:安装PHP详细步骤
- 自然数e这家伙怎么蹦跶出来的?
- C语言/Python经典算法冒泡排序
- 迷茫的时候找到了未来的方向
- 第五章 彩色图像处理