开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第12天,点击查看活动详情
前言
场景:处理某些事务之后需要告知上游已经处理或者通知下游可以执行业务。这一类的场景还要划分是需要同步执行还是异步,分析数据量以及业务量。然后根据相应的业务需求采取相关的操作手段。但是在前后端交互的时候一般也会划分几种方式执行。
HTTP操作
HTTP操作基于请求-响应模式,从客户端发起请求开始。这是一个同步的过程,向服务器发送请求后,客户端被迫等待服务器端回应。
尽管我们有Ajax请求,不离开当前页面实现客户端和服务器之间的信息交流(可异步模式进行) ,但是对于消息应用程序、聊天室、协作工具,多用户在线游戏或实时信息服务HTTP操作无法满足。 所以我们需要这样一种情形:需要服务器自身就能成为主动向客户端发送消息的一方。
轮询
轮询通常指通过客户端进行周期性的连接,定期检查服务器上相关的更新。如:ajax循环请求
但这种方式还是http操作。
推送:服务器采取主动
webSocket
客户端和服务器端创建一条双向通道,这样两方都可以随时互相通信。
WebSocket提供的JavaScript API 简单又直观
Server-SentEvents(API Event Source)
var mySocket =new WebSocket("ws://localhost:9999/demo")
mySocket.onopen = function (openEvent) {
//WebSocket 连接已建立,使用send()发送数据
mySocket.send("");
};
mySocket.onmessage = function (messageEvent) {
//客户端接收服务端数据时触发
};
mySocket.onerror = function (errorEvent) {
//通信发生错误时触发
};
mySocket.onclose = function (closeEvent) {
//连接关闭时触发
}
消息中间件
用户需要交互性强、反应敏捷、具有协作性的应用,所以我们需要利用推送模式的即时性,但也要考虑浏览器和基础设施的局限性。现如今可使用的方案就是依赖第三方的消息中间件,然后有专门的消息服务去消费消费完成之后的业务逻辑功能。
所以可用的方案有很多种,还需要根据自己的场景需求具体问题具体分析,然后使用相关的技术方案。