websocket中发生数据丢失_什么是WebSocket,它与HTTP有何不同?
今天翻译一篇关于HTTP
和WebSocket
的文章。HTTP
和WebSocket
都是客户端-服务器通信中使用的通信协议。文章用几个例子解释了两者的不同以及分别适用在什么应用场景。有些容易混淆的概念(比如说HTTP
长连接)和待补充的概念我用斜体字注解到了文章中。
作者:GeeksforGeeks
来源:GeeksforGeeks
原文链接:https://www.geeksforgeeks.org/what-is-web-socket-and-how-it-is-different-from-the-http/
HTTP协议
HTTP
是单向的,客户端发送请求,服务器发送响应。举例来说,当客户端向服务器发送请求时,该请求以HTTP
或HTTPS
的形式发送,在接收到请求后,服务器会将响应发送给客户端。每个请求都与一个对应的响应相关联,在发送响应后客户端与服务器的连接会被关闭。每个HTTP
或HTTPS
请求每次都会新建与服务器的连接,并且在获得响应后,连接将自行终止。 HTTP
是在TCP
之上运行的无状态协议,TCP
是一种面向连接的协议,它使用三向握手方法保证数据包传输的传递并重新传输丢失的数据包。
HTTP
可以运行在任何可靠的面向连接的协议(例如TCP
,SCTP
)的上层。当客户端将HTTP
请求发送到服务器时,客户端和服务器之间将打开TCP
连接,并且在收到响应后,TCP
连接将终止,每个HTTP
请求都会建立单独的TCP
连接到服务器,例如如果客户端向服务器发送10个请求,则将打开10个单独的HTTP
连接。并在获得响应后关闭。
理解上面这段关于 HTTP
的描述时我觉得还要了解一下HTTP
长连接的概念,以及HTTP
与TCP
的关系,简单概括一下就是:
HTTP
协议的长连接和短连接,实质上是TCP
协议的长连接和短连接。- 每个
HTTP
连接完成后,其对应的TCP
连接并不是每次都会关闭。从HTTP/1.1
起,默认使用长连接,用以保持连接特性。使用长连接的HTTP
协议,会在响应头有加入这个头部字段:Connection:keep-alive
- 在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输
HTTP
数据的TCP
连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。Keep-Alive
不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache
,Nginx
,Nginx
中这个默认时间是 75s)中设定这个时间。实现长连接要客户端和服务端都支持长连接。 HTTP
属于应用层协议,在传输层使用TCP
协议,在网络层使用IP
协议。IP
协议主要解决网络路由和寻址问题,TCP
协议主要解决如何在IP
层之上可靠的传递数据包,使在网络上的另一端收到发端发出的所有包,并且顺序与发出顺序一致。TCP
有可靠,面向连接的特点。
HTTP消息信息是用ASCII
编码的,每个HTTP
请求消息均包含HTTP
协议版本(HTTP/1.1
,HTTP/2
),HTTP
方法(GET
/POST
等),HTTP
标头(Content-Type
,Content-Length
),主机信息等。以及包含要传输到服务器的实际消息的正文(请求主体)。HTTP
标头的大小从200字节到2KB
不等,HTTP
标头的常见大小是700-800字节。当Web
应用程序在客户端使用更多cookie
和其他工具扩展代理的存储功能时,它将减少HTTP
标头的荷载。
WebSocket协议
WebSocket
是双向的,在客户端-服务器通信的场景中使用的全双工协议,与HTTP
不同,它以ws://
或wss://
开头。它是一个有状态协议,这意味着客户端和服务器之间的连接将保持活动状态,直到被任何一方(客户端或服务器)终止。在通过客户端和服务器中的任何一方关闭连接之后,连接将从两端终止。
让我们以客户端-服务器通信为例,每当我们启动客户端和服务器之间的连接时,客户端-服务器进行握手随后创建一个新的连接,该连接将保持活动状态,直到被他们中的任何一方终止。建立连接并保持活动状态后,客户端和服务器将使用相同的连接通道进行通信,直到连接终止。
新建的连接被称为WebSocket
。一旦通信链接建立和连接打开后,消息交换将以双向模式进行,客户端-服务器之间的连接会持续存在。如果其中任何一方(客户端服务器)宕掉或主动关闭连接,则双方均将关闭连接。套接字的工作方式与HTTP
的工作方式略有不同,状态代码101
表示WebSocket
中的交换协议。
何时使用WebSocket
- 即时
Web
应用程序:即时Web
应用程序使用一个Web
套接字在客户端显示数据,这些数据由后端服务器连续发送。在WebSocke
t中,数据被连续推送/传输到已经打开的同一连接中,这就是为什么WebSocket
更快并提高了应用程序性能的原因。 例如在交易网站或比特币交易中,这是最不稳定的事情,它用于显示价格波动,数据被后端服务器使用Web套接字通道连续推送到客户端。 - 游戏应用程序:在游戏应用程序中,你可能会注意到,服务器会持续接收数据,而不会刷新用户界面。屏幕上的用户界面会自动刷新,而且不需要建立新的连接,因此在
WebSocket
游戏应用程序中非常有帮助。 - 聊天应用程序:聊天应用程序仅使用
WebSocket
建立一次连接,便能在订阅户之间交换,发布和广播消息。它重复使用相同的WebSocket
连接,用于发送和接收消息以及一对一的消息传输。
不能使用WebSocket的场景
如果我们需要通过网络传输的任何实时更新或连续数据流,则可以使用WebSocket
。如果我们要获取旧数据,或者只想获取一次数据供应用程序使用,则应该使用HTTP
协议,不需要很频繁或仅获取一次的数据可以通过简单的HTTP
请求查询,因此在这种情况下最好不要使用WebSocket
。
注意:如果仅加载一次数据,则RESTful
Web
服务足以从服务器获取数据。
总结
websocket中发生数据丢失_什么是WebSocket,它与HTTP有何不同?相关推荐
- websocket中发生数据丢失_获取使用关闭代码1006关闭websocket的原因
关闭代码1006是一种特殊的代码,它表示浏览器实现异常(本地)关闭了连接. 如果您的浏览器客户端报告关闭代码1006,那么您应该在websocket.onerror(evt)事件中查看详细信息. 但是 ...
- websocket中发生数据丢失_为什么事实上却发生了数据丢失,只有少部 分数据可以加载进来...
为了提高自身业务性能,优化资源使用,该公司决定使用分钟表,即每五分 钟区间内,从 kafka-A 集群新消费过来的数据为一个批次,生成一个带有账期和 批次拼接的文件以 Load Data 的方式写入到 ...
- 中发生数据丢失_如何防止Redis脑裂导致数据丢失?
所谓的脑裂,就是指在主从集群中,同时有两个主节点,它们都能接收写请求.而脑裂最直接的影响,就是客户端不知道应该往哪个主节点写入数据,结果就是不同的客户端会往不同的主节点上写入数据.而且,严重的话,脑裂 ...
- websocket中发生数据丢失_tcp协议;websocket协议;同源策略和跨域
tcp协议 为什么连接的时候是三次握手,关闭的时候却是四次握手? 答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文.其中ACK报文是用来应答的,SYN报 ...
- websocket中发生数据丢失_node.js – Websocket传输可靠性(重新连接期间Socket.io数据丢失)...
其他人在其他答案和评论暗示了这一点,但根本问题是Socket.IO只是一个交付机制,你不能依靠它单独的可靠交付.唯一知道消息已成功传递给客户端的人是客户端本身.对于这种系统,我建议做以下断言: > ...
- websocket中发生数据丢失_Websocket传输可靠性(重新连接时Socket.io数据丢失)
其他人在其他答案和评论中暗示了这一点,但根本问题是Socket.IO只是一种传递机制,你不能单独依靠它来实现可靠的交付 . 唯一确定消息已成功传递给客户端的人 is the client itself ...
- html5 websocket java 聊天室_如何利用WebSocket实现网页版聊天室
花了将近一周的时间终于完成了利用WebSocket完成网页版聊天室这个小demo,期间还走过了一段"看似弯曲"的道路,但是我想其实也不算是弯路吧,因为你走过的路必将留下你的足迹.这 ...
- websocket如何区分用户_实现:websocket判断用户是否在线
根据我们之前的介绍,websocket是HTML5中新增的一个协议, 该协议可以实现服务器与客户端之间全双工通信. websocket在实时通信领域运用的比较多,比如社交聊天.弹幕.多玩家游戏.协同编 ...
- websocket传输数据大小限制_踩踏websocket:发送缓冲区大小超过允许的限制
在客户端我使用Stomp进行websocket连接,服务器端使用 Spring 4 客户端我做了配置 var socket = new SockJS(urlBase + "/" + ...
最新文章
- [转].Net连接池超时注意事项
- 基于xgboost 的贷款风险预测
- C++ Primer 5th笔记(chap 16 模板和泛型编程)重载与模板
- 以太坊go-ethereum项目源码本地环境搭建
- VS2008中开发智能设备程序的一些总结
- 【渝粤题库】国家开放大学2021春3924★汽车电器设备构造与检修题目
- HDU1258 DFS
- Ubuntu Server 18.04 与 MySQL 5.7
- 在WEB程序中隐藏后门
- windows下php命令行模式错误信息
- window wlan 相关服务
- 数字图像处理与python实现 pdf_python数字图像处理实现直方图与均衡化
- linux版本浏览器有哪些,5款面向Linux的简单Web浏览器
- Air202s6 怎么下载程序
- 使用opencv和双目摄像头制作裸眼3d视频
- exo文件_eXo平台概述
- 在线IDE- Gitpod介绍
- Excel.cpp和Excel.h的获取
- APP消息智能推送有什么特点
- python 尖括号表示什么类型,Python的小括弧,中括号,大括号还有尖括号的区别...
热门文章
- 数据结构与算法之花费铜板最小和利润最大题目
- Spark之Spark角色介绍及运行模式
- 业界首创,腾讯网络平台部实现大规模光网络实时管控系统TOOP
- Syslog系统日志配置
- k8s 基础介绍及概念
- VMware与KVM全方面对比
- kubernetes1.8.4 安装指南 (基于静态Pod方式安装)
- win10下cmd ping不通虚拟机,xshell连不上虚拟机【如果实在想不出来原因,就看看吧】
- 使用logstash将Mysql中的数据导入到ElasticSearch中(详细步骤,win_Elasticsearch)
- Vue008_ Vue实例生命周期