Java服务器推送技术——实时数据传输的新选择 (java 服务器推送技术)

摘要:

随着网络应用越来越广泛,数据推送技术也愈加重要。Java服务器推送技术可以让开发者轻松完成实时数据传输,适用于各种场景,如股票市场、即时通讯和社交网络等。本文将介绍Java服务器推送技术的基本原理和使用方法,并探讨其在实时数据传输方面的优势。

正文:

一、Java服务器推送技术的基本原理

Java服务器推送技术是一种实现服务器到浏览器的双向通信的技术。基于HTTP协议,通过长连接(长轮询)或WebSocket等方式,将服务器端推送的数据实时传输到浏览器端,实现了双向通信。

在传统的HTTP请求中,服务器只能被动地响应浏览器的请求,而无法主动向浏览器发送数据。这就导致了数据推送的不便。但是,Java服务器推送技术的出现解决了这个问题。通过HTTP的长连接(长轮询)或WebSocket技术,服务器可以将数据主动推送到浏览器中,实现实时数据传输,大大地提高了推送效率和速度。

二、Java服务器推送技术的使用方法

1.基于长连接(长轮询)的Java服务器推送技术

基于长连接的Java服务器推送技术,即长轮询。它的原理是在浏览器发送一个请求后,服务器会将请求挂起,等到有数据更新时再返回数据。这样就可以实现实时更新数据,同时也避免了频繁请求服务器导致浏览器崩溃的情况。

基于长连接的Java服务器推送技术有以下的特点:

(1)在客户端与服务器之间建立一个长连接,即轮询连接。

(2)轮询连接由客户端发起,服务端处理轮询请求。

(3)在请求时间内,客户端会一直处于等待数据更新的状态。

(4)当数据更新时,服务端会把新数据发送到客户端,客户端接收到数据后再重新发起轮询请求。

2.基于WebSocket的Java服务器推送技术

WebSocket是一种新的网络传输协议,它在HTML5中首次出现。通过WebSocket,浏览器与服务器之间可以建立一条全双工的通信通道,服务器可以主动向客户端发送数据,客户端也可以主动向服务器发送数据,实现双向通信。

基于WebSocket的Java服务器推送技术有以下的特点:

(1)建立一条全双工的通信通道,即WebSocket连接。

(2)客户端可以主动发起WebSocket连接。

(3)服务器可以主动向客户端发送数据。

(4)客户端也可以主动向服务器发送数据。

三、Java服务器推送技术在实时数据传输方面的优势

Java服务器推送技术在实时数据传输方面的优势主要体现在以下几个方面:

1.高效性

Java服务器推送技术通过长连接或WebSocket技术,可以实现高效、实时的数据传输,大大地降低了数据传输的延迟,提升了用户体验。

2.可靠性

Java服务器推送技术通过轮询、心跳等机制保证了连接的可靠性,即便网络环境不稳定、断开重连的情况下也能够保证数据的传输。

3.安全性

Java服务器推送技术通过对数据的加密传输和认证机制,保证了数据的安全性,防止数据被非法访问和篡改。

4.灵活性

Java服务器推送技术可以适应各种场景,例如股票市场、即时通讯、社交网络等。无论是高并发的实时数据推送,还是大规模的即时通讯,Java服务器推送技术都能够提供一种高效、稳定的解决方案。

结语:

Java服务器推送技术以其高效、可靠、安全、灵活等优势,成为了实时数据传输的新选择。无论是商业应用还是开源应用,Java服务器推送技术都已经成为了越来越多开发者的首选。只要掌握了Java服务器推送技术的基本原理和使用方法,就能轻松完成实时数据传输的开发。

相关问题拓展阅读:

java服务器推送消息给android

具体我也没接触过android消息推送方面的知识,所以这里只能提供一下自己的想法,具体能不能实现,仅供参考。

刚看到这个问题,自己能想薯镇埋到的解决方案只有两种:

之一种就是android应用每隔一段时间像服务器询问数蚂有没有新的消息,这个有明显的缺点,询问频率过高,会对,会增加手机的耗电,频率太低,消息更新不及时,当然,实现起来也是最简单的。

第二种就是服务器与android程序一直保持连接,向android程序发送消息:以前接触过一个旅行叫做xmpp协议的东西,有个开源项目叫做openfire服务,就是基于xmpp协议做的,有一个即时聊天的PC端的开源项目,叫做spark,服务器就是用的openfire,还有一个android端的即时聊天的国外开源项目,叫做beem,服务器也是用的openfire,这里面肯定用到的有关消息推送方面的知识,希望对你有所帮助吧。

几种常见的解决方案实现原理

  1)轮询(Pull)方式:客户端定时向服务器发送询问消息,一旦服务器有变化则立即同步消息。

  2)S(Push)方式:通过拦截S消息并且解析消息内容来了解服务器的命令,但这种方世乎式一般用户在经济上很难承受。

  3)持久连接(Push)方式:客户端和服颤歼务器之间建立长久连接,这样就可以实现消息的及时行和实时性。

  3、消息推送解决方案概述

  A、C2DM云端推送方案

在Android手机平台上,Google提供了C2DM(Cloudto Device Messaging)服务。Android

Cloud to Device Messaging (C2DM)是一个用来帮助开发者从服务器向Android应用程序发送数据的服务。该服务提供了一个简单的、轻量级的机制,允许服务器可以通知移动应用程序直接与服务器进行通信,以便于从服务器获取应用程序更新和用户数据。

该方案存在的主要问题是C2DM需要依赖于Google官方提供的C2DM服务器,由于国内的网络环境,这个服务经常不可用。

  B、MQTT协议实现Android推送

  采用MQTT协议实现Android推送功能也是一种解决方案。MQTT是一个轻量级的消息发布/订阅协议,它是实现基于手机客户端的消息推送服务器的理想解决方案。

  wmqtt.jar

是IBM提供的MQTT协议的实现。我们可以从这里(

)下载该项目的实例代码,并且可以找到一个采用PHP书写的服务器端实现(

)。

  C、RB实现推送功能

  Really Small Message Broker (RB)

,是一个简单的MQTT代理,同样由IBM提供,其查看地址是:

。缺省打开1883端口,应用程序当中,它负责接收来自服务器的消息并将其转发给指定的移动设备。SAM是一个针对MQTT写的PHP库。我们可以从这个

地址下载它.

  D、XMPP协议实现Android推送

  Google官方的C2DM服务器底层也是采用XMPP协议进行的封装。XMPP(可扩展通讯和表示协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线探测。这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息。

  androidpn是一个基于XMPP协议的java开源Android push notification实现。它包含了完整的客户端和服务器端。但也存在一些不足之处:

  1)

比如时间过长时,就再也收不到推送的信息了。

  2)性能上也不够稳定搜洞悉。

3)如果将消息从服务器上推送出去,就不再管理了,不管消息是否成功到达客户端手机上。

如果我们要使用androidpn,则还需要做大量的工作,需要理解XMPP协议、理解Androidpn的实现机制,需要调试内部存在的BUG。

具体我也没接触过android消息推送方面的知识,所以这里只能提供一下自己的想法,具体能不能实现,仅供参考。刚看到这个问题,自己能想薯镇埋到的解决方案只有两种:之一种就是android应用每隔一段时间像服务器询问数蚂有没有新的消息,这个有明显的缺点,询问频率过高,会对,会增加手机的耗电,频率太低,消息更新不及时,当然,实现起来也是最简单的。第二种就是服务器与android程序一直保持连接,向android程序发送消息:以前接触过一个旅行叫做xmpp协议的东西,有个开源项目叫做openfire服务,就是基于xmpp协议做的,有一个即时聊天的PC端的开源项目,叫做spark,服务器就是用的openfire,还有一个android端的即时聊天的国外开源项目,叫做beem,服务器也是用的openfire,这里面肯定用到的有关消息推送方面的知识,希望对你有所帮助吧。

SSE(Server-Send Events)实践

HTTP 是客户端-服务器计算模型中的请求-响应协议。要开始交换,客户端向服务器提交请求。为了完成交换,服务器向客户端返誉和回响应。服务器只能向一个客户端发送响应 (发出请求的那个) 。在 HTTP 协议中,客户端是消息交换的发起者。

服务器发送事件 (SSE) 是一种简单的技术,用于为特定的 Web 应用程序实现服务器到客户端的异步通信。

有多种技术允许客户端从服务器接收有关异步更新的消息。它们可以分为两类:

客户端拉取

服务器推送

在客户端拉取技术中,客户端会定期向服务器请求更新。服务器可以使用更新或尚未更新的特殊响应进行响应。有两种类型的客户端拉取:短轮询和长轮询。

客户端定期向服务器发送请求。如果服务器有更新,它会向客户端发送响应并关闭连接。如果服务器没有更新,它也会向客户端发送一个响应并关闭连接。

客户端庆答盯向服务器发送请求。如果服务器有更新,它会向客户端发送响应并关闭连接。如果服务器没有更新,它会保持连接直到更新可用。当更新可用时,服务器向客户端发送响应并关闭连接。如果更新在某个超时时间内不可用,服务器会向客户端发送响应并关闭连接。

在服务器推送技术中,服务器在消息可用后立即主动向客户端发送消息。其中,有两种类型的服务器推送:SSE和 WebSocket。

SSE 是一种在基于浏览器的 Web 应用程序中仅从服务器向客户端发送文本消息的技术。SSE基于 HTTP 协议中的持久连接, 具有由 W3C 标准化的网络协议和 EventSource 客户端接口,作为 HTML5 标准套件的一部分。

WebSocket 是一种在 Web 应用程序中实现同时、双向、实时通信的技术。WebSocket 基于 HTTP 以外的协议(TCP),因此可能需要额外设置网络基础设施(代理服务器、NAT、防火墙等)。

客户端通过Http协议请求,在握手阶段升级为WebSocket协议。

在数据字段中,服务器可以发送事件数据

服务器可以发送唯一的事件标识符(id字段)。如果连接中断,客户端会

自动重新连接

并发送最后接收到的带有header的 Last-Event-ID 的事件 ID。

在重试字段中,服务器可以发送超时(以毫秒为单位),之后客户端应在连接中断时自动重新连接。如果未指定此字段,则标准应为 3000 毫秒。

如果一行以冒号字符 : 开头,客户端应该忽略它。这可用于从服务器发送评论或防止某些代理服务器因超时关闭连接。

要打开连接,应创建一个 EventSource 对象。

尽管 SSE 旨在将事件从服务器发送到客户端,但可以使用 GET 查询参数将数据从客户端传递到服务器。

要关闭连接,应调用举薯方法 close()。

有表示连接状态的 readyState 属性:

客户端接收消息并处理他们,可以使用onmessage方法

SSE可被大多数浏览器支持:

Spring Web MVC 框架 5.2.0 是基于 Servlet 3.1 API 且用线程池实现异步应用程序. 所以应用能够被使用在 Servlet 3.1+ 的容器,比如:Tomcat 8.5 和 Jetty 9.3.

使用Spring MVC来发送事件:

示例:

在这个例子中,服务器每秒发送一个持续时间短的周期性事件流 – 一个有限的词流,直到词完成。

示例:

运行效果:

客户端示例(words.html):

运行效果:

在此示例中,服务器发送持久的周期性事件流 – 每秒可能无限的服务器性能信息流:

效果预览(每秒输出一次):

非周期性是指没有固定的时间周期,可能由其他因素在任意时刻都可能触发,下面示例通过spring event来模拟触发因子。

效果:

模拟触发动作:调用

客户端收到数据:

Spring Web Flux 框架 5.2.0 是基于 Reactive Streams API 且使用

event-loop

计算模型来实现异步java应用程序。 此类应用程序可以在非阻塞 Web 服务器(例如 Netty 4.1 和 Undertow 1.4)和 Servlet 3.1+ 容器(例如 Tomcat 8.5 和 Jetty 9.3)上运行。

使用 Spring Web Flux 框架实现发送事件:

简单示例:

和上面spring mvc的示例一样,也是每秒输出数据,实现如下:

效果:

对比spring mvc的实现,我们改为flux实现,如下:

效果和上面是一样的,可以看出,reactive api是非常的简洁。

java 服务器推送技术的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java 服务器推送技术,Java服务器推送技术——实时数据传输的新选择,java服务器推送消息给android,SSE(Server-Send Events)实践的信息别忘了在本站进行查找喔。


数据运维技术 » Java服务器推送技术——实时数据传输的新选择 (java 服务器推送技术)