想要实现服务器推送功能,这里整理了一些可用的方法。
客户端与服务器长时间保持通信的技术:
1.不使用HTTP:HTML 5 新增的 WebSocket 规范
2.使用 HTTP :主要是简易轮询、COMET 技术和 HTML 5 服务器推送事件
comet:
COMET 技术改进了简易轮询的缺点,使用的是长轮询。长轮询的方式在每次请求时,服务器端会保持该连接在一段时间内处于打开状态,而不是在响应完成之后就立即关闭。这样做的好处是在连接处于打开状态的时间段内,服务器端产生的数据更新可以被及时地返回给浏览器。当上一个长连接关闭之后,浏览器会立即打开一个新的长连接来继续请求。不过 COMET 技术的实现在服务器端和浏览器端都需要第三方库的支持。
http://blog.csdn.net/u014386474/article/details/51767273
comet4j:
https://www.2cto.com/kf/201408/323658.html
pushlet:
http://blog.csdn.net/z69183787/article/category/2275667
cometD:
http://abentotoro.blog.sohu.com/203996578.html
https://docs.cometd.org/current/reference/#_preface
http://www.cnblogs.com/tonyY/p/4756223.html
http://hsabby.iteye.com/blog/1924974
Atomasphere:
https://github.com/Atmosphere/atmosphere
https://github.com/AndreasKl/springboot-angular-atmosphere-quickstart
https://github.com/Atmosphere
drw:
http://www.cnblogs.com/hoojo/archive/2011/06/08/2075201.html
Html5 SSE:
Server-sent Events 规范是 HTML 5 规范的一个组成部分。主要有两个部分:第一个部分是服务器端与浏览器端之间的通讯协议,第二部分则是在浏览器端可供 JavaScript 使用的 EventSource 对象。通讯协议是基于纯文本的简单协议。服务器端的响应的内容类型是“text/event-stream”。响应文本的内容可以看成是一个事件流,由不同的事件所组成。每个事件由类型和数据两部分组成,同时每个事件可以有一个可选的标识符。不同事件的内容之间通过仅包含回车符和换行符的空行(“\r\n”)来分隔。每个事件的数据可能由多行组成。
https://www.ibm.com/developerworks/cn/web/1307_chengfu_serversentevent/
http://wiki.jikexueyuan.com/project/html5/sse.html
https://spring.io/blog/2017/03/08/spring-tips-server-sent-events-sse
https://golb.hplar.ch/p/Server-Sent-Events-with-Spring
Websocket:
新的网络通信协议,建立在 TCP 协议之上,与 HTTP 协议有着良好的兼容性。默认端口也是80和443,并且握手阶段采用 HTTP 协议,因此握手时不容易屏蔽,能通过各种 HTTP 代理服务器。协议标识符是ws(如果加密,则为wss),服务器网址就是 URL。能够使得服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话。
Javascript API编写WebSocket客户端:
只需调用 WebSocket 构造函数即可打开 WebSocket 连接,一般使用socket.io库:
var connection = new WebSocket('ws://html5rocks.websocket.org/echo', ['soap', 'xmpp']);
WebSocket 的服务器端:
Node :
Java:
http://www.ruanyifeng.com/blog/2017/05/websocket.html
https://socket.io/
https://github.com/eidheim/Simple-WebSocket-Server
https://developer.mozilla.org/zh-CN/docs/Web/API/WebSockets_API/Writing_a_WebSocket_server_in_Java
http://colobu.com/2015/02/27/WebSockets-tutorial-on-Wildfly-8/
https://www.html5rocks.com/zh/tutorials/websockets/basics/
ActiveMQ ajax:
结合消息中间件,客户端直接请求mq。ActiveMQ的ajax特性是由客户端的 amq.js脚本提供的。从ActiveMQ 5.4开始,该脚本利用三个不同的适配器中的一个来支持与服务器的通信。流行的jQuery、Prototype以及Dojo都是被支持的,并且这三个库的比较新的版本都随ActiveMQ发布了。
http://blog.csdn.net/u013755987/article/details/60960618
http://activemq.apache.org/ajax.html
https://www.npmjs.com/package/amq-ajax-client
http://blog.csdn.net/u010967382/article/details/28641407
https://www.oschina.net/question/23734_10518
http://www.oschina.net/question/1024469_103878
http://www.voidcn.com/article/p-ruejdoui-nn.html
Vert.x:
Vert.x基于全异步Java服务器Netty,是 Reactor模式的Java实现,JVM上的NodeJS替代者。利用了Initiation Dispatcher组件,把耗时的IO操作事件注册到Initiation Dispatcher组件,耗时IO 操作由其它线程执行,IO执行完成后通知Initiation Dispatcher,再回到 Http Handler执行。支持TCP、HTTP、Websocket等模块。
http://www.csdn.net/article/2015-05-20/2824733-Java
https://github.com/eclipse/vert.x
参考链接:
https://stackoverflow.com/questions/5195452/websockets-vs-server-sent-events-eventsource