长/短 链接/轮询 和websocket

2023-10-27

短连接和长连接

短连接

  • http协议底层基于socket的tcp协议,每次通信都会新建一个TCP连接,即每次请求和响应过程都经历”三次握手-四次挥手“
  • 优点:方便管理
  • 缺点:频繁的建立和销毁连接占用资源

长连接

  • 客户端和服务端之间只有一条TCP通信连接,以后所有的请求都使用这条连接,也称为持久连接。

  • 优点:多次请求-响应基于一条连接,避免资源浪费。

  • 缺点:客户端的数量增加,服务端承受的压力增大。对每个请求仍然要单独发header,Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。

总结

  • 长短连接指的是客户端和服务端建立和保持TCP连接的机制。
  • 不论是短连接还是长连接,都是客户端主动向服务端发请求,才能获悉数据,服务端是无法主动给客户端推送信息的。
  • 服务端主动给客户端推送消息最简单的方式是采用轮询,即客户端每隔一段时间就向服务端发出一个询问,获取服务端最新的消息。最典型的应用就是聊天室。

短轮询和长轮询

短轮询

  • 浏览器每隔一段时间向服务端发送http请求,服务器端在收到请求后,不论是否有数据更新,都直接进行响应。这种方式实现的即时通信,本质上还是浏览器发送请求,服务器接受请求的一个过程,通过让客户端不断的进行请求,使得客户端能够模拟实时地收到服务器端的数据的变化。
  • 优点:比较简单,易于理解;
  • 缺点:由于需要不断的建立 http 连接,严重浪费了服务器端和客户端的资源。当用户增加时,服务器端的压力就会变大,这是很不合理的。

长轮询:

  • 首先由客户端向服务器发起请求,当服务器收到客户端发来的请求后,服务器端不会直接进行响应,而是先将 这个请求挂起,然后判断服务器端数据是否有更新。

    如果有更新,则进行响应,如果一直没有数据,则到达一定的时间限制才返回。客户端 JavaScript 响应处理函数会在处理完服务器返回的信息后,再次发出请求,重新建立连接。

  • 优点:「明显减少了很多不必要的 http 请求次数」,相比之下节约了资源。

  • 缺点:实现复杂,且连接挂起也会导致资源的浪费。

总结

  • 短轮询和长轮询指的是客户端请求服务端,服务端给予响应的方式。
  • 轮询的方式可以解决服务端主动向客户端推送消息的需求,但是轮询的效率低,非常浪费资源(因为必须不停连接,或者 HTTP 连接始终打开)。
  • 为了更好的解决这个问题,于是出现了WebSocket

WebSocket

简介

  • WebSocket 协议在2008年诞生,2011年成为国际标准。所有浏览器都已经支持了。

  • 服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种。

  • 可以发送文本,也可以发送二进制数据。

  • 协议标识符是ws(如果加密,则为wss),服务器网址就是 URL。

websocket:websocket是长连接,是一个真的全双工,第一次tcp链路建立以后,后续所有数据双方都主动发送,不需要发送请求头,与传统的 http 协议不同,该协议允许由服务器主动的向客户端推送信息。与HTTP长连接不同,websocket可以更灵活的控制连接关闭的时机,而不是HTTP协议的Keep-Alive一到,服务端立马就关闭(这样很不人性化)。

优点

  • 建立在 TCP 协议之上,服务器端的实现比较容易。
  • 与 HTTP 协议有着良好的兼容性。默认端口也是80和443,并且握手阶段采用 HTTP 协议,因此握手时不容易屏蔽,能通过各种 HTTP 代理服务器。
  • 数据格式比较轻量,性能开销小,通信高效。
  • 没有同源限制,客户端可以与任意服务器通信。

缺点

  • 使用 WebSocket 协议的缺点是在服务器端的配置比较复杂。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

长/短 链接/轮询 和websocket 的相关文章

随机推荐

  • Python——UDP Socket实现视频互传,远程调用另一台电脑摄像头(cv2)

    一台电脑当服务器多线程提供摄像头服务 支持多台电脑调用 目录 一台电脑当服务器多线程提供摄像头服务 支持多台电脑调用 一 效果展示 和舍友联机 多台电脑效果 二 带注释的代码 1 服务端 2 客户端 一 效果展示 和舍友联机 多台电脑效果
  • 力扣刷题 每日两题(一)

    一 力扣20题 class Solution object def isValid self s type s str rtype bool if len s 0 return True stack for c in s if c or c
  • FISCO-BCOS 一、默认配置搭建区块链网络

    一 采用默认配置搭建区块链网络 1 安装openssl ubuntu依赖 sudo apt install y openssl curl 2 创建操作目录 下载安装脚本 cd mkdir p fisco cd fisco 3 搭建单群组4节
  • 面试分享

    在软件测试的面试过程中 经常会出一些测试基础的问题 以此来评估应聘者的基本测试功底和知识储备 下面我就为大家整理了一些软件测试常见面试题及答案 仅供参考 之前的推文也有分享过相关的软件测试面试题 正在准备面试的小伙伴们可以进入本公众号 面试
  • flutter内存泄漏常见分析

    内存泄漏是Flutter中的一个常见问题 以下是一些可能导致内存泄漏的情况和注意事项 未释放控制器 在使用一些控制器 如AnimationController TextEditingController等 时 需要在不需要时及时释放控制器
  • 创建线程的方式打开记事本

    更好的阅读体验 huge color red 更好的阅读体验 更好的阅读体验 今天操作系统课老师讲到进程 提出了一个有趣的小实验 能否以系统调用的方式利用 Windows 创建进程的系统调用函数来打开一个软件 闲着蛋疼的我立马来了兴趣 姑且
  • unity开发VR,没有VR设备解决方式

    文章目录 前言 一 环境搭建 1 普通VR环境搭建 2 虚拟相机搭建 二 模拟相机的操作 总结 前言 开发实例环境为unity2018 4 11 VRTK3 3 0 steamVR1 2 23 当我们身边没有HTC VIVE设备时我们不能去
  • Android Studio中的mavenCentral、jcenter、google仓库

    一 Android Studio中依赖是从哪里得到 是从工程的build gradle里面定义的Maven仓库服务器去下载library的 总的来说 只有两个标准的Android library文件服务器 mavenCentral和jcen
  • AES加密和解密详解

    本文使用的是cyrpto js库 以AES CBC为例 先安装cyrpto js cyrpto js是js专门用来加密和解密用到的一个库 第一步 先确认一下电脑是否有node和npm 输入node version显示 v 版本号就可以下一步
  • RPMB分区介绍

    RPMB Replay Protected Memory Block重放保护内存块 Partition 是 eMMC 中的一个具有安全特性的分区 eMMC 在写入数据到 RPMB 时 会校验数据的合法性 只有指定的 Host 才能够写入 同
  • Java之解压Tar.gz和Gz文件到指定的目录下

    工作中的需求 需要读取指定路径下的压缩文件 然后解压到指定的目录下 引入maven依赖
  • msvcp140.dll丢失的4个解决方法,msvcp140.dll丢失的常见原因

    msvcp140 dll是Windows操作系统中的一个动态链接库文件 由Microsoft Visual C 程序库所提供 它包含了许多C 函数和类的定义 可以为应用程序提供一些基本服务 比如内存管理 文件输入 输出和网络连接等功能 我们
  • phpstorm表单递交post出错get正确的解决方法

    好吧 这是我第二次因为这个问题搞得凌晨才睡觉 这次一定要记录下来 phpstorm版本2016 1 1 问题详细描述 在html写好表单之后以post方式递交给php文件 返回结果在谷歌浏览器是 Automatically populati
  • Allegro如何做镂空丝印操作指导

    Allegro如何做镂空丝印操作指导 在PCB设计丝印的时候 会需要画镂空的丝印 Allegro升级到了172版本的时候 可以画镂空的丝印 如下图 具体操作如下 选择Shape Add Rect命令 Options选择需要画到的层面 比如S
  • nginx文档合集

    1 nginx documentation 2 14个Nginx的核心功能点 建议收藏 3 Nginx之负载均衡模块 ngx http upstream module 途径日暮不赏丶的博客 CSDN博客 4 tomcat redis ses
  • 华为OD机试 - 完美走位(Python)

    完美走位 题目描述 输入一个长度为4的倍数的字符串 字符串中仅包含WASD四个字母 将这个字符串中的连续子串用同等长度的仅包含WASD的字符串替换Q 如果替换后整个字符串中WASD四个字母出现的频数相同 那么我们称替换后的字符串是 完美走位
  • Android Studio 快捷键盘

    Alt 回车 导入包 自动修正 Crtl X 剪贴 删除本行 之前用Eclipse Ctrl D 就是删除 在AndroidStudio 中是复制本行到下一行 找了好久都没找到删除本行快捷键的 汗 Ctrl N 查找类 Ctrl Shift
  • CTO、技术总监、首席架构师的区别

    一 高级程序员 如果你是一个刚刚创业的公司 公司没有专职产品经理和项目经理 你就是公司的产品经理 你如果对你现在的开发员能力不满 那么你只需要的是一个高级程序员 你定义功能 你做计划推进和管理 他可以带1 2个副手把你规划的功能实现了 他是
  • PostgresSQL 用linux命令重启时出错:pg_ctl: server does not shut down

    出错原因 在建一个新的数据库 然后restore好久都没成功 就把服务器直接关掉重启了 然后通过linux去重启数据库就一直不成功 下面是出错信息和解决步骤 用service postgresql restart去重启数据库 总是报以下错误
  • 长/短 链接/轮询 和websocket

    短连接和长连接 短连接 http协议底层基于socket的tcp协议 每次通信都会新建一个TCP连接 即每次请求和响应过程都经历 三次握手 四次挥手 优点 方便管理 缺点 频繁的建立和销毁连接占用资源 长连接 客户端和服务端之间只有一条TC