当前位置: 首页 > news >正文

重庆网站建设公司名单邢台seo技术

重庆网站建设公司名单,邢台seo技术,青岛网站建设q.479185700強,深圳创业补贴申请后多久到账目录 前言什么是WebSocketWebSocket的工作原理WebSocket与HTTP的关系HTTP建立持久化连接WebSocket类封装 前言 最近写项目#xff0c;需要实现消息通知和实时聊天的功能#xff0c;就去了解了一些关于websocket的知识#xff0c;总结如下。 什么是WebSocket WebSocket 是一… 目录 前言什么是WebSocketWebSocket的工作原理WebSocket与HTTP的关系HTTP建立持久化连接WebSocket类封装 前言 最近写项目需要实现消息通知和实时聊天的功能就去了解了一些关于websocket的知识总结如下。 什么是WebSocket WebSocket 是一种在 Web 应用中实现实时通信的协议。与传统的 HTTP 请求不同WebSocket 连接在客户端和服务器之间建立一个持久性的双向通信管道使得数据可以在连接打开后随时传递。这消除了 HTTP 请求的开销能更好的节省服务器资源和带宽同时在实时应用中提供了更好的性能和响应性。 WebSocket 就像是你和服务器之间的一个电话线可以在任何时候进行通话。和普通的浏览网页不同WebSocket 让你能够实时地接收和发送信息而不需要频繁地向服务器询问是否有新的消息。 WebSocket的工作原理 WebSocket 协议的工作原理基于握手handshake和消息传递。当客户端发起 WebSocket 握手请求时服务器将进行握手确认建立连接。一旦连接建立客户端和服务器可以互相发送消息而不必每次都进行新的握手。 建立连接 在客户端浏览器发起 WebSocket 连接请求时服务器会进行响应建立一个持久的连接通道。这个过程类似于握手它使用了 HTTP/HTTPS 协议来发起连接请求。双向通信 连接建立成功客户端和服务器都可以通过这个通道实时地发送和接收数据消息可以是文本或二进制数据。不像传统的 HTTP 请求WebSocket 允许服务器主动向客户端推送数据也允许客户端向服务器发送请求实现双向通信。保持连接 一旦连接建立客户端和服务器之间就会保持一个持久的连接通道不需要每次都重新建立连接。这使得数据传输更加高效减少了不必要的连接建立和关闭开销。关闭连接 当客户端或服务器希望终止连接时可以发送一个特殊的关闭帧告知对方要关闭连接。对方接收到关闭帧后也会发送一个确认帧并关闭连接。这是一个优雅的断开连接方式不需要像传统的 HTTP 请求那样等待服务器的响应。类似于双方结束通话然后挂断电话。 WebSocket与HTTP的关系 WebSocket 和 HTTP 是两种不同的协议它们有着不同的通信方式、连接状态和数据传输方式。WebSocket在实现实时性通信方面更加高效而 HTTP 更适用于请求-响应式的短期数据交换。 共同点 WebSocket 和 HTTP 都是用于网络通信的协议都是在应用层工作。它们都基于 TCP/IP 协议用于在客户端和服务器之间传输数据。联系 WebSocket 协议最初是作为 HTTP 协议的扩展而提出的因此在握手阶段使用了 HTTP 协议来建立连接。WebSocket 握手请求使用的是 HTTP 请求然后在协议升级时切换到 WebSocket 协议建立持久的双向连接。所以WebSocket是在 HTTP 协议的基础上构建的。区别 1. HTTP是请求-响应式通信数据通常单向传输。而WebSocket 是全双工通信双向数据传输。 2. 在 HTTP 中每次请求和响应都会携带大量的头部信息这些信息描述了请求和响应的性质。而在 WebSocket 握手时也会有一些头部信息但之后数据传输时的头部相对较少从而减少了传输开销且websocket没有像http那样可以只定义请求头的一些参数只有一个Sec-WebSocket-Protocol属性用于自定义子协议。 3. HTTP 适用于传输短期请求-响应式的数据如网页的加载和表单提交。WebSocket 更适用于实时性要求较高的场景如在线聊天、实时数据更新、多人协作等。 HTTP建立持久化连接 HTTP Keep-Alive 长连接 长连接是一种保持连接打开的通信方式客户端与服务器建立连接后在一段时间内保持连接处于打开状态以便后续的 HTTP 请求复用它。在长连接中一次 TCP 连接可以被用来发送多个 HTTP 请求和响应而不是每次请求都建立一个新的连接。 Keep-Alive 适用于需要实时数据传输的场景如聊天应用、实时游戏、实时数据监控等。它可以实现低延迟的实时通信提高通信效率。但需要维护长时间的连接状态对服务器资源和网络负载有一定影响。 Long Polling长轮询 长轮询是一种模拟实时通信的方法。在长轮询中客户端发送一个请求到服务器服务器在等待新数据或事件的时候保持连接打开直到有新的数据或事件发生时才发送响应给客户端。客户端收到响应后立即处理然后再次发送请求以保持连接。 长轮询适用于不支持真正长连接的环境如基于HTTP协议的环境。它可以模拟实时通信但因为每次响应后都需要重新建立连接所以在一些情况下可能会有较高的延迟和网络开销。 WebSocket类封装 class WebSocketClass {constructor(wsurl, time) {this.wsurl wsurl //连接地址this.token localStorage.getItem(accessToken)this.time time //多少秒执行检测this.socketTask nullthis.is_open_socket false //避免重复连接this.heartbeatInterval null //检测服务器端是否还活着this.reconnectTimeOut null //重连之后多久再次重连this.connectSocketInit()}// 建立初始连接connectSocketInit() {this.socketTask new WebSocket(this.wsurl, this.token)// 当连接成功时this.socketTask.onopen (res) {console.log(websocket连接成功, res);this.is_open_socket true//连接正常清除重连定时器this.clearReconnect();// this.startHeartbeat();}// 当收到消息时this.socketTask.onmessage (res) {console.log(res.data)}// 当连接出错时this.socketTask.onerror (res) {console.log(websocket连接出错, res);this.is_open_socket false// this.reconnect()}// 当连接关闭时this.socketTask.onclose (res) {console.log(websocket已经被关闭了, res);this.is_open_socket false// this.reconnect()}}// 发送消息send(value) {if (this.is_open_socket) {this.socketTask.send(value);} else {console.log(无法发送消息WebSocket未连接);}}// 开启心跳检测startHeartbeat() {this.heartbeatInterval setInterval(() {const heartbeatMessage {value: 测试一下服务器端是否在连接状态,method: 开启心跳机制};this.send(JSON.stringify(heartbeatMessage)) // 发送心跳消息}, this.time * 1000)}//停止发送心跳stopHeartbeat() {clearInterval(this.heartbeatInterval);}// 清除重连定时器clearReconnect() {clearTimeout(this.reconnectTimeout);}// 重新连接reconnect() {//停止发送心跳this.stopHeartbeat()//如果不是人为关闭的话进行重连if (!this.is_open_socket) {this.reconnectTimeOut setTimeout(() {this.connectSocketInit();}, 3000)}}//外部获取消息getMessage(callback) {this.socketTask.onmessage (res) {return callback(res) // 调用外部回调函数处理消息}} } export default WebSocketClass; // 调用方法 // ------------------------------------------------------------------- // 单页面 // import WebSocketClass from /network/webSocket; // let ws new WebSocketClass(ws:****,5000) // 发送消息 // let data{value:传输内容,method:方法名称} // ws.send(JSON.stringify(data)); // 接收消息 // ws.getMessage(res{ // console.log(res); // })可能学习的不够深刻、总结不到位请谅解。如有误请指正
http://www.zqtcl.cn/news/772053/

相关文章:

  • 电子商务类网站模板自学网站建设基本流程
  • 无锡网站制作的公司上海企业服务公司
  • 做h5小程序的网站搜索引擎营销案例
  • 订餐网站开发方案查询网站是否正规
  • 建站论坛图片生成器免费
  • 怎么做自己的店铺网站博物馆门户网站建设优势
  • 专业旅游培训网站建设应用之星 wordpress
  • 青海媒体网站建设公司深圳网站建设推广优化公司
  • 网站开发 价格跨境支付互联互通
  • 织梦 修改网站logo营销型网站设计的内容
  • 电商网站运营策划做网站CentOS还是win好
  • 小型企业网站模板企业网站seo点击软件
  • 提供邯郸企业建网站网站图片上怎么做弹幕效果
  • 滨州做网站的wordpress如何添加商桥
  • 网站登录密码忘记网站开发营业执照申请
  • 电商网站设计思路音乐推广平台有哪些
  • 网站建设傲鸿网站链轮内有死链
  • 哪些网站可以做微商品牌宣传网站怎么不花钱做排名 知乎
  • 上传了网站源码怎么做wordpress加百度广告代码出问题
  • 哪些网站做推广vi设计说明模板
  • 杭州市建设工程造价管理协会网站攀枝花建设工程质量监督站投诉网站
  • 做网站推广送什么深圳的网站建设公司流程
  • 中国网站开发的前景制作公司主页网站
  • 在线画流程图的网站购物网站的设计与实现论文
  • 淘宝客cms网站建设K12网站怎么建设
  • 专业门户网站开发浙江省湖州艺术与设计学校官网
  • 企业网站搭建价格搭建平台的另一种说法
  • 网站开发框架桂林人论坛风姿摄影
  • 吉林省建设安全信息网站网站服务器和空间有什么区别
  • 百度制作网站怎么去掉2345网址导航