当前:计算机网络--面试总结四(HTTP、RPC、WebSocket、SSE)
知识积累之ThreadLocal---InheritableThreadLocal总结
HTTP和RPC
RPC的特点:
- 1、调用方便:调用远程服务就像调用本地方法一样
- 2、性能较好:RPC通常使用二进制进行传输,这样可以减少数据的体积并且提高传输效率,由于RPC考虑的是服务之间的调用不像HTTP那样需要兼容各种场景,因此请求头部内容也相对比较简单,并且RPC可以选择各种传输协议,比如TCP、UDP等等,而HTTP传输层使用的是TCP
其实通过前面的学习,我们不难知道HTTP2.0,3.0其实给予1.1都改进了很多,性能也非常不错,可能比很多RPC协议都要好,但是2.0是这几年才出的,而RPC出现的时间比HTTP1.1还早,所以也不太可能取代RPC
为什么要有WebSocket
传统HTTP想要及时拿到服务端数据的方法
现在有这样一种场景,需要客户端-服务端进行频繁的交互,比如聊天室、网页小游戏等,如果使用传统的HTTP来拿到服务端响应后的数据主要就是两种方案
- 1、定时轮训获取
- 2、长轮训获取
定是轮询
对于定时轮寻来说,就是客户端浏览器每隔一段时间发送一个请求去问服务端好了没有,如果没好就直接返回,然后进行下一次的请求发送,这样一次往复,比如我们轮询时间定的是1s那么就是,当第一次访问服务端,服务端还没好之后,客服端需要等待1s后又重新发送请求,知道拿到数据为止
- 缺点:由于是定时轮询,因此,客户端拿到数据可能有延迟
长轮训
对于长轮询来说:其实长轮寻,其实可以看作是一个被延迟的HTTP请求过程,即,比如客服端发送一个请求,然后就一直等待服务端的响应,只要没到超时时间,那么就一直等待如果服务端做出了响应了,那么客户端就能马上收到消息,如果超时了,那么只需要重新发送HTTP请求就可以了,从而达到能够立刻知道服务端响应
优点
- 减少请求次数:相比于短轮询,长轮询减少了无效的请求次数,因为服务器会在有数据时才返回响应。
- 降低带宽和服务器负载:由于减少了请求次数,长轮询也降低了对带宽和服务器资源的消耗。
- 实时性较好:虽然长轮询不是真正的实时推送,但它可以在一定程度上模拟实时效果,因为服务器在有新数据时会立即响应。
缺点
- 延迟:虽然长轮询可以减少请求次数,但它仍然存在一定的延迟,因为客户端需要等待服务器响应才能获取新数据。
- 资源占用:在长时间没有新数据的情况下,服务器需要保持连接打开状态,这可能会占用一定的服务器资源。
应用场景
长轮询适用于那些对实时性要求不是特别高,但又不希望频繁发送请求的Web应用程序场景,新闻更新提示等。在这些场景中,长轮询可以在不增加过多服务器负载的情况下,提供较好的实时性体验。
WebSocket与SSE的区别和应用场景
WebSocket
定义与特点 :
WebSocket是一种在单个TCP连接上进行全双工通讯的协议。它允许客户端和服务器之间通过持久连接进行实时通信,而无需像传统的HTTP请求那样频繁地建立和断开连接。WebSocket协议建立在HTTP之上,但一旦连接建立,通信就独立于HTTP。
使用场景 :
WebSocket适用于需要高频率、双向数据交换的应用场景,如在线游戏、实时聊天应用、实时协作工具、股票交易平台等。这些场景要求服务器能够主动向客户端推送数据,并且客户端也需要能够随时向服务器发送数据。
优点:
- 实时性强:WebSocket提供了低延迟的实时通信能力。
- 双向通信:支持客户端和服务器之间的双向数据传输。
- 减少服务器负担:由于减少了HTTP连接的建立和断开次数,减轻了服务器的负担。
- 支持自定义协议:开发者可以自定义二进制帧,支持更灵活的数据传输方式。
缺点:
- 复杂度较高:相对于SSE,WebSocket的实现和维护复杂度更高。
- 兼容性:虽然WebSocket的兼容性较好,但在一些老旧的浏览器或服务器环境中可能仍存在问题。
- 服务器向客户端推送数据。
- 客户端接收数据。
定义与特点:
SSE是一种基于HTTP的服务器推送技术他是半双工通信,它允许服务器主动向客户端推送数据。SSE通过建立一个持久的HTTP连接(实际上是长轮询的一种变种),服务器可以在有数据更新时主动向客户端发送事件通知。客户端使用浏览器内置的EventSource接口来接收这些事件。
使用场景 :
SSE适用于需要从服务器向客户端单向推送实时信息的场景,如现在的AI回答基本上使用的都是SSE技术,新闻更新、股票价格变动、社交媒体通知等。这些场景通常不需要客户端向服务器发送大量数据,而是需要服务器能够实时地向客户端推送最新的信息。
优点:
- 实现简单:SSE的实现相对简单,客户端只需使用EventSource接口即可。
- 浏览器兼容性好:SSE得到了大多数现代浏览器的支持。
- 服务器负担较轻:由于基于HTTP协议,SSE可以利用现有的HTTP服务器和基础设施。
缺点:
- 单向通信:SSE只支持服务器向客户端的单向推送,不支持客户端向服务器发送数据(除非使用其他机制,如Ajax)。
- 连接限制:在某些情况下,浏览器可能对SSE连接数有限制,这可能会影响大规模应用的性能。
- 安全性:SSE本身不提供加密机制,需要依赖TLS等协议来保证数据传输的安全性。
总结
WebSocket和SSE都是实现实时通信的有效技术,它们各有优劣和适用场景。WebSocket适用于需要高频率、双向数据交换的应用场景,而SSE则适用于从服务器向客户端单向推送实时信息的场景。在选择使用哪种技术时,需要根据具体的应用需求和场景来综合考虑。