springweb flux 服务器推送事件

以前做服务器推送一般用轮询,后端主动给客户端推送不是很好解决。有时候也可以采用websocket

现在看了springwebflux,用它自带的方法做服务器推送方便多了.

代码如下:

import org.springframework.http.codec.ServerSentEvent;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;
import reactor.util.function.Tuples;

import java.time.Duration;
import java.util.concurrent.ThreadLocalRandom;

/**
 * 服务器推送事件
 * Created by mingge on 2018/5/4.
 */
@RestController
@RequestMapping("/sse")
public class SseController {
    @GetMapping("/randomNumbers")
    public Flux<ServerSentEvent<Integer>> randomNumbers() {
        return Flux.interval(Duration.ofSeconds(1))
                .map(seq -> Tuples.of(seq, ThreadLocalRandom.current().nextInt()))
                .map(data -> ServerSentEvent.<Integer>builder()
                        .event("random")
                        .id(Long.toString(data.getT1()))
                        .data(data.getT2())
                        .build());
    }
}

就定义普通的controller就可以了。

原文地址:https://www.cnblogs.com/huzi007/p/9019960.html

时间: 2024-08-29 16:40:29

springweb flux 服务器推送事件的相关文章

HTML5 服务器推送事件(Server-sent Events)实战开发

转自:http://www.ibm.com/developerworks/cn/web/1307_chengfu_serversentevent/ http://www.ibm.com/developerworks/cn/web/wa-lo-comet/     --comet长连接 服务器推送事件(Server-sent Events)是 HTML 5 规范中的一个组成部分,可以用来从服务端实时推送数据到浏览器端.相对于与之类似的 COMET 和 WebSocket 技术来说,服务器推送事件的

SSE技术详解:一种全新的HTML5服务器推送事件技术

前言 一般来说,Web端即时通讯技术因受限于浏览器的设计限制,一直以来实现起来并不容易,主流的Web端即时通讯方案大致有4种:传统Ajax短轮询.Comet技术.WebSocket技术.SSE(Server-sent Events).关于这4种技术方式的优缺点,请参考<Web端即时通讯技术盘点:短轮询.Comet.Websocket.SSE>.本文将专门讲解SSE技术. 服务器推送事件(Server-sent Events),简称SSE,是 HTML 5 规范中的一个组成部分,可以用来从服务端

HTML5服务器推送事件

目前客户端(浏览器)和服务端交互大致有以下几种方式: 1)form表单提交方式,适合访问量不大,对用户体验要求不高的web系统开发,或者页面整体刷新无伤大雅的场合,通信方向是客户端提交给服务端,是客户端主动发起: 2)Ajax方式,特点是用户体验好,无需页面整体刷新,对服务器压力也小,有利于客户端和服务端的解耦,也是目前广为使用的一种客户端服务端交互方式,它也是通过客户端发起请求,服务端接受处理,通信方向和form表单相同: 3)server-sent-event,它是服务端主动向客户端(浏览器

html5之服务器推送事件

用于服务器实时向客户端推送消息,这个是单向推送server to client 服务器端 header头 要想服务器端推送:在服务器端的报头要定义: header('Content-Type:text/event-stream'),服务器发送的响应内容应该使用这种`text/event-stream`的MIME;这样客户端才能理解你这是发送的不是普通的数据, eventsource对象才能识别 事件流 服务器端发送事件流(内容); 每执行一次php文件就产生一个事件流: 事件流是由多个消息组成:

HTML5服务器端推送事件 解决PHP微信墙推送问题

问题描述 以前的文章中<PHP微信墙制作,开源>已经用PHP搭建了一个微信墙获取信息的服务器,然后我就在想推送技术应该怎么解决,上一篇已经用了.NET 的signalr做了一个微信墙,PHP一直没什么好思路,本来想用websocket,但自己写socket要解析websocket协议,PHP有一个比较好的实现是workerman,github地址请戳这里,但是都不是很中意,昨天给自己做官网的时候,看了一下MDN,浏览发现了这个东西"使用服务器发送事件",突然就有了思路,今天

服务器推送的实现—基于EventSource

一.服务器推送理解 首先要知道为什么使用服务器推送,回答这个问题其实就是相当于回答,服务器推送的优点,可以从两个方面来思考: 1.1 服务器推送的目的 及时的将客户端感兴趣的数据推送给它. 1.2 不是用服务器推送怎么来实现需求 不使用服务端推送,那就只能由客户端定期对服务器发送请求,来获取是否有需要的数据.这样做有几个缺点: 不能及时的获取,最大延时时间为轮询间隔. 浪费资源,大部分的请求,都不会得到数据 轮询间隔短会对服务器造成较大的压力. 1.3 使用服务器推送可以带来什么好处 我理解的有

基于comet服务器推送技术(web实时聊天)

http://www.cnblogs.com/zengqinglei/archive/2013/03/31/2991189.html Comet 也称反向 Ajax 或服务器端推技术.其思想很简单:将数据直接从服务器推到浏览器,而不必等到浏览器请求数据. 主要思想:服务器端将数据推送到客户端(浏览器) 本人做了简单的web实时聊天系统:服务器推送(聊天).zip 系统简单说明如下: { 系统所用数据库:sqlite数据库 UserInfo:用户信息表 UserRelation:用户关系表 Mes

服务器推送初探

服务器推送,Comet,反向Ajax,多种名字,捯饬起来也是相当费劲. 先来看服务端: w3cSchool有个简单的例子,http://www.w3school.com.cn/html5/html_5_serversentevents.asp. 对于php,有几点需要注意: 1)设置header, header('Content-Type: text/event-stream'); 若不设置,会报错的. 2)在echo信息的时候,如果字符串过短,会不输出 最好先输出一堆空格: str_repea

服务器推送

WebSocket是HTML5开始提供的一种在单个 TCP 连接上进行全双工通讯的协议.WebSocket通信协议于2011年被IETF定为标准RFC 6455,WebSocketAPI被W3C定为标准. 在WebSocket API中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道.两者之间就直接可以数据互相传送. 背景 现在,很多网站为了实现推送技术,所用的技术都是轮询.轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP request,然