服务器推送技术

article/2025/10/3 18:22:11

目录

1.前序

2.Ajax短轮询

3.Ajax长轮询

4.SSE

5.WebSocket

6.总结

 


1.前序

服务器推送技术:不用用户刷新发出请求,服务器主动发送实时信息到客户端。

 因为HTTP协议是无状态,单向性的协议。

无状态是说客户端每一次请求都是全新的,服务器不会记录这次的你是不是上次的你。

单向性是说必须由客户端发起请求连接,服务器接受连接,把数据返回给客户端。

 所以从服务器推送消息给客户端,有两种方式,一种是客户端主动定时的刷新请求,另一种就是客户端与服务器建立长连接

 

2.Ajax短轮询

 Ajax短轮询:定时通过Ajax查询服务器。

由客户端间隔一定时间主动发出请求,服务器响应当前数据。时间到了客户端再次发送请求,服务器返回当前数据。

 这样做的好处:服务器端基本不用改造,只需要在前端加一个函数,定期发送Ajax请求就好了。

setInterval(function(){$.ajax({... ...});}, 3000);

 这样做的坏处:服务器压力和资源的浪费。客户端定期就向服务器发送一条请求,由于HTTP协议的特性,即使没有数据,服务器也必须响应这一次请求,如果间隔时间设置的很短,那服务器压力就会变大。每次请求都会响应数据(不论数据是否更新)给客户端,占用带宽造成资源浪费。

还有一个很重要的缺点就是数据不同步,如果在某一次服务器刚刚响应数据后数据发生了更新,那客户端在拿到更新数据是下次一请求。所以在数据更新到下一次请求这段时间客户端的数据与服务器不同步,请求间隔时间短了服务器压力大,请求时间隔时间长了不能做到实时。

 

3.Ajax长轮询

由于Ajax短轮询存在数据不同步的严重缺点,因此又开发出了基于HTTP长连接的服务器推送技术——Comet。

Comet应用一种是基于Ajax的长轮询方式实现。另一种是基于长连接的服务器推模型

Ajax的长轮询:当客户端使用Ajax发出请求时,服务器会阻塞请求直到有数据传递或超时时才返回。

客户端JS响应处理函数会在处理完服务器返回的信息后,在此发出请求,重新建立连接。

当客户端处理接收数据,重新建立连接时,服务器可能有新的数据到达;这些信息会被服务器保存直到客户端重新建立连接,客户端会一次把当前服务器端所有的信息取回。

缺点:服务器端保留响应,使用的web容器会创建一个线程用来处理请求,比如Tomcat,同时支持的连接数不超过1000,因此会导致我们这个服务性能低下。这个问题可以使用异步任务来处理,spring提供了DeferredResult。

 还有一个缺点,就是实时性虽然较高,但是稍有欠缺。当服务器有了新数据响应给客户端的时候,或者客户端在处理响应的时候产生的更新数据,只能等客户端下次请求的时候再响应给客户端。

 

4.SSE

对于对实时性要求特别高的行业,需要完全实时性的方法来提供服务。

这个方法叫做SSE,流方式(长连接),又叫Server-sent-events(SSE),是HTML5规范的一个组成部分,和长轮询方式很像,只有一点区别,就是流方式是在客户端请求服务端并建立连接后,服务器端始终不会关闭连接。每次有数据时,就像客户端进行输出,而不像长轮询每次向客户端输出之后,都要关闭连接。

SSE主要由两部分组成:包括服务器端与浏览器端之间的通讯协议,基于纯文本的简单协议。在浏览器端可供JavaScript使用的EventSource对象

EventSource提供了三个标准事件,同时默认支持断线重连。

名称说明事件处理方法
open当成功与服务器建立连接时产生onopen
message当收到服务器发来的消息时产生onmessage
error当出现错误时产生onerror

 

 

 

 

但是由于每次响应都会由tomcat返回给客户端,而tomcat默认响应完之后断开连接,然后客户端支持断线重连,又会重新连接,因此在浏览器查看网络包会发现流方式也不是发出一次请求,然后等服务器推送,而是每一次连接都会发起请求。

解决这个问题的方式就是第一次收到客户端的请求,待服务器响应的时候拿到输出流PrintWriter,然后自己向客户端去写返回的流,直到不再有 数据的时候再通过tomcat返回响应,关闭本次连接。这样流方式才是真正的一次连接,多次传输。

 

5.WebSocket

前边介绍的三种方式都还是在HTTP协议的基础上进行传输,其单向性的特点并没有改变。

但是WebSocket不同。

它是HTML5中的协议,实现客户端与服务器双向,基于消息的文本或二进制数据通信,是全双工。

适合于对数据的实时性要求很强,客户与服务端频繁交互的场景,如直播,实时共享桌面,多人协作等。

采用新的协议,后端需要单独实现,客户端并不是所有浏览器都支持。

与SSE进行比较:

工作方式不同,WebSocket是双向通信,SSE是单向通信。

SSE使用HTTP协议,一般只用来传送文本,WebSocket是一个独立的协议,支持传输二进制

SSE默认支持断线重连,WebSocket需要自己实现。

 

6.总结

 1.Ajax短轮询2.Ajax长轮询3.SSE4.WebSocket
浏览器支持度最高很高中(IE和Edge均不支持)中(早期的浏览器不支持)
实时性最低较高很高很高
代码实现复杂度最容易较容易容易最复杂
连接性质短链接长连接长连接长连接
适用需要服务极大量或极小量的用户,实时性要求不高准实时性的应用,比较关注浏览器的兼容性实时,基本都是文本交互的应用实时,需要支持多样化的用户数据类型的应用或者是原生程序

 


http://chatgpt.dhexx.cn/article/qQSTypFI.shtml

相关文章

网络编程五-服务器推送技术

目录 一、服务器推送技术 1、服务器推送技术的兴起 2、应用场景 二、Ajax短轮询 1、定义 2、特点 三、Comet 3.1 AJAX 的长轮询 1、定义 2、特点 3.2 SSE 1、定义 2、特点 四、WebSocket通信 1、什么是webSocket 2、特点 3、WebSocket通信握手 4、WebSocket通…

SecureFx连接Linux系统乱码

最近用SecureFx连接Ubuntu时,出现乱码,经过一番查询资料和实验最终得以解决,希望对大家有所帮助。 1、在选项中设置字符编码为UTF-8 Options -- Session Options -- Teminal -- Appearance 2、在选项的全局选项中找到Securefx的配置文件 Opt…

SecureCRT和SecureFx的使用

SecureCRT和SecureFx的使用 1.SecureCRT和SecureFx登陆中文乱码2.SecureFX打开两个窗口,即本地窗口和远程窗口 1.SecureCRT和SecureFx登陆中文乱码 SecureCRT与SecureFX的常规选项里面已经设置成了UTF-8,但是在SecureCRT中新建的中文文件夹,…

SecureCRT SecureFX中文乱码修改问题

1、一般解决方法:修改UFT-8 选项--会话选项--外观--字符编辑--选择UFT-8--确定【有可能需要重启一下CRT】 2、配置文件修改【好用】: 选项--全局选项--常规--配置文件夹【复制配置文件夹路径,选择要修改的ini文件】 将UTF8"00000000修改…

SecureFX传输速度一直是0

今天学往Linux里传jdk和tomcat时发现传输速度一直不动,检查了Linux的网络连接,也正常,如图: 而且连接ip也对,最后突然想到了权限问题,发现自己登录的不是root用户,又败给了自己...

安装SecureCRT和SecureFX踩过得坑

1.下载 给大家提供两种下载途径吧 1.官网可以下载到最新版的,弊端呢就是需要用邮箱注册一下,登录后才能下载,只有三十天的试用期,如果想长久使用的话还得破解一下,稍微的麻烦一丢丢。 2.https://pan.baidu.com/s/18OZ…

SecureFX之激活教程

SecureCRT激活请参考另一篇文章:SecureCRT激活教程 SecureFX激活教程开始: 步骤1:把激活软件放到该软件的安装目录下:(如果找不到安装目录,找到该软件的桌面快捷方式,鼠标右键-----打开文件位…

SecureFx设置密钥登陆

SecureFx设置密钥登陆: 工具,创建公钥下一步密钥类型选RSA 为了更安全,可以设置通行短语 7、将identity.pub上的公钥放到服务器上 ①创建目录 /root/.ssh 并设置权限 [rootlocalhost ~]# mkdir /root/.ssh (mkdir 命令来创建目录) [ro…

解决SecureFX中文乱码的方法

SecureFX出现乱码,解决办法 1.点击Options选项,选择Global Options 2.点击打开Global Options窗口之后,在左边的General选项下方找到Configuration Path并点击,然后在右边找到路径并将它复制下来,如下图中所示。 3.路径…

解决SecureFX无法连接linux服务器

场景描述: 使用SecureFX无法连接linux服务器。 显示:由于目标计算机积极拒绝,无法连接 但使用它的配套软件SecureCRT,却可以进行连接。 问题分析: 既然CRT可以连接,说明Linux服务器本身是没有问题&#…

SecureFX_CRT安装

SecureFX_CRT_9安装和注册 SecureFX_CRT_9下载地址:暂时没放上去,最近有点忙,之后再完善下 一、安装 运行SecureFX_CRT安装程序,安装完之后先注册再运行程序 二、注册 注册SecureFX 1、进入安装的目录(我的安装目录是…

SecureCRTSecureFX Portable远程连接Linux;上传下载文件

SecureCRT和SecureFX都是由VanDyke出品的SSH传输工具。 SecureCRT是一款非常好用的、支持多标签的SSH客户端,极大方便了管理多个SSH会话。 SecureFX则是一款专业而灵活、支持安全文件传输的SFTP客户端,也支持SCP、SSL等安全协议、以及传统的FTP协议。另…

SecureCRT$SecureFX的安装方法

SecureCRT$SecureFX的安装方法 SecureCRT$SecureFX下载地址 链接:https://pan.baidu.com/s/1SskwXkD6Cc1JKhvcQUIAIw 提取码:n1ql 安装过程 下载完成后,并解压SecureCRT&SecureFX Version.rar 运行安装程序scrt-sfx-x64.9.1.1.2638.…

SecureCRT和SecureFX

1.SecureCRT & SecureFX 介绍 1.1 SecureCRT SecureCRT 是一款终端仿真软件,和 Putty 的功能类似。 不过相比Putty比较简单的功能,SecureCRT 软件还是有许多的优势。比如可以一次创建多个 Tab Page,连接多台远程主机; Butto…

secureCRT及secureFX配置

secureCRT及secureFX配置 secureCRT安装卸载调节字体中文乱码 secureFX展示带.的文件展示带.的文件显示文件夹树右半边详细信息不见了 参考链接 secureCRT 安装 因为是需要注册的一般需要网上的注册码,可以用的,但是没有secureFX 见下链接 也可以直接去网上找那些自带改注册…

linux securefx 传输文件失败,解惑:如何使用SecureCRT上传和下载文件、SecureFX乱码问题...

解惑:如何使用SecureCRT上传和下载文件、SecureFX乱码问题 一、前言 很多时候在windows平台上访问Linux系统的比较好用的工具之一就是SecureCRT了,下面介绍一下这个软件的一些基本使用。 二、上传和下载文件 当我们登录到Linux系统之后最常用的操作就是上传和下载文件了。Sec…

ftp客户端SecureFX 安装教程

一个稳定且功能齐全的ftp客户端工具都可以节省你大量时间和生命,现在有大量的免费或者收费的ftp客户端软件供大家选择。ftp客户端软件有很多,SecureFX 下载速度非常快,功能齐全。mac文件如何安全的传输?为您推荐SecureFX for mac,SecureFX mac版可以更加…

关于 SecureFx传输远程服务器中文显示乱码 的解决方法

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/125101597 红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软…

SecureCRT SecureFX

SecureCRT & SecureFX 简介及安装 secureCRT是一款的终端仿真程序,界面友好,可以在Windows下登陆Linux服务器主机,不仅支持SSH1,SSH2,而且支持Telnet和rlogin协议。 secureCRT还支持 VBScript 和 JScript&#xf…

SecureFX 中文乱码

SecureFX 中文乱码 在使用SecureFX连接服务器进行数据传输时,发现包含中文名称的文件在SecureFX中无法正常显示,出现的都是乱码。 后来经过一些列修改,搞定中文名称乱码问题。 那么,如何处理SecureFX中的中文乱码情况&#xff…