Spring WebFlux (6): RSocket 服务实现

RSocket是一种二进制协议,可用于字节流传输,例如TCP,WebSockets和Aeron。

提供了四中交互模式:

request/response (stream of 1) 请求/响应(单响应)大多数请求就是这种模式,仅1个响应的流,是在单个连接上多路复用的异步消息

request/stream (finite stream of many) 可以将其视为“集合”或“列表”响应,但不是将所有数据作为单个响应返回,而是按顺序流回每个元素。

fire-and-forget (no response) 无返回,在不需要响应时非常有用。它不仅可以通过跳过响应来节省网络使用量,而且可以在客户端和服务器处理时间内进行重大的性能优化,因为不需要簿记来等待和关联响应或取消请求。适用于可以有丢失的场景(非关键日子记录)

channel (bi-directional streams) 双向消息流,用于源数据更新,断开连接等,可以获取订阅更新后的差额而不是重新获取一遍

它支持会话恢复,以允许跨不同的传输连接恢复长寿命的流。当网络连接频繁断开,切换和重新连接时,这对于移动服务器通信特别有用。

Springboot对RSocket进行了封装MessagingRSocket,通过Message进行传递,依赖如下:

implementation 'org.springframework.boot:spring-boot-starter-rsocket'

应用示例

简单实现rsocket连接示例,设置一个服务端一个客户端,服务端实现server接口提供服务,客户端接收服务端信息,并通过RESTful访问数据在浏览器中显示

1. 创建服务端

简单实现一个记录温度的类

@Data

@NoArgsConstructor

@AllArgsConstructor

@Builder

class Temperature {

Long id;

Double temperature;

LocalDateTime time;

public Temperature (long id) {

this.id = id;

this.temperature = ThreadLocalRandom.current().nextDouble(20.0,35.0);

this.time = LocalDateTime.now();

}

}

实现一个服务接口

注意标红处跟RESTful类controller写法的不同

设置rsocket服务端口:

spring.rsocket.server.port=8081

2. 客户端配置

温度容器类:

@Data

@NoArgsConstructor

@AllArgsConstructor

@Builder

class Temperature {

Long id;

Double temperature;

LocalDateTime time;

}

连接接口:

interface Client {

Flux temperature ();

}

通过连接接口实现服务

@Service

@RequiredArgsConstructor

class RSocketClient implements Client {

private final RSocketRequester rSocketRequester;

public Flux temperature () {

return rSocketRequester.route("server")

.retrieveFlux(Temperature.class);

}

}

通过RESTful controller调用服务

@RestController

@RequiredArgsConstructor

@RequestMapping("client")

class RSocketClientController {

private final RSocketClient rSocketClient;

@GetMapping(produces = MediaType.APPLICATION_STREAM_JSON_VALUE)

public Flux temperature() {

return rSocketClient.temperature();

}

}

配置访问路径:

@Configuration

class ClientConfiguration {

@Bean

public Client client (RSocketRequester rSocketRequester) {

return new RSocketClient(rSocketRequester);

}

@Bean

public RSocketRequester rSocketRequester (RSocketRequester.Builder builder) {

return builder.connectTcp("localhost", 8081).block();

}

}

3. 运行测试

访问http://localhost:8090/client

rSocketClient连接connectTcp("localhost", 8081), 接收数据

返回到浏览器

![Peek 2020-08-13 16-26](README.assets/Peek 2020-08-13 16-26.gif)

代码

server

client

webflux 文件服务器,WebFlux_RSocket_server相关推荐

  1. 文件服务器共享目录设置(二)

    三.             设置磁盘配额及文件屏蔽 为了防止用户无限制的上传文件,或上传病毒木马等文件,还需要进一步加强安全设置.用磁盘配额来管理用户的文件夹空间,用文件屏蔽来阻止用户上传有风险的文 ...

  2. c 找文件服务器文件,Linux C/C++项目:虚拟文件服务器(功能匹配百度网盘)

    github地址:https://github.com/Worthy-Wang/NetDisk FTP文件服务器设计思路: 1.整体架构采用线程池结合epoll监听 客户端通过sockfd与服务器通信 ...

  3. Spring Boot 2 快速教程:WebFlux 快速入门(二)

    2019独角兽企业重金招聘Python工程师标准>>> 摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘 ...

  4. Windows 文件服务器升级跨林迁移(二)

    迁移文件服务器 登陆到ADMT迁移服务器上,打开ADMT管理控制台,邮件点击AD迁移工具,选择"计算机迁移向导" 点击下一步 选择源域为旧的控,目标域为新域控,点击下一步 从域中选 ...

  5. Windows Server 2012 文件服务器群集

    概述:之前已经测试了Windows Server 2012系统群集.Hyper-V群集,接下来将测试Windows Server 2012 文件服务器群集功能. 实验环境: 4台服务器都为Window ...

  6. 文件服务器的内存要多少,文件服务器内存要多大

    文件服务器内存要多大 内容精选 换一换 Windows场景中,当把源端服务器迁移到华为云后,目的端服务器C盘的已用空间比对应源端服务器C盘的已用空间大至少1GB,而不是与源端服务器C盘的已用空间一致, ...

  7. 文件服务器搭建 xp,xp文件服务器搭建

    xp文件服务器搭建 内容精选 换一换 登录Windows操作系统的弹性云服务器时,需使用密码方式登录.因此,用户需先根据创建弹性云服务器时使用的密钥文件,获取该弹性云服务器初始安装时系统生成的管理员密 ...

  8. 使用Nginx搭建前端静态服务器+文件服务器

    大家可能被虚拟主机不太了解,那我们的解释一下,虚拟主机指在一台物理主机服务器上划分出多个磁盘空间,每个磁盘空间都是一个虚拟主机,每台虚拟主机都可以对外提供Web服务,并且互不干扰. 一.Nginx的虚 ...

  9. 文件服务器raid1设置,文件服务器raid1设置

    文件服务器raid1设置 内容精选 换一换 外部镜像文件在从原平台导出前,没有按照"Windows操作系统的镜像文件限制"的要求完成初始化操作,推荐您使用弹性云服务器完成相关配置. ...

最新文章

  1. 2022-2028年中国PGA树脂行业全景调研及投资前景展望报
  2. 整理《Mastering OpenCV with Practical Computer Vision Projects》中第8章用Eigenfaces或Fisherfaces进行人脸识别操作流程
  3. python _、__和__xx__的区别
  4. 基于深度学习的OCR-from 美團技術團隊
  5. php如何生成html,php生成html文件方法总结
  6. 语音识别真的比肩人类了?听听阿里iDST初敏怎么说
  7. linux tasklet函数,14.9.5 实例:Tasklet演示
  8. OS / CPU是如何访问内存的?
  9. JavaScript中闭包实现的私有属性的getter()和setter()方法
  10. 合格的Java程序员需要提升的能力有哪些
  11. python电子英汉词典显示_python网页抓取之英汉字典
  12. css碎步测量,CORS系统控制点点位可靠性研究.doc
  13. 算法题存档20200627(树)
  14. Typora + PicGo + Aliyun OSS + CSDN
  15. 如何使用组策略提升Windows系统性能
  16. 「镁客·请讲」云迹科技张名举:酒店是移动机器人最标准化的服务场景,将有更多服务岗位被机器人替代...
  17. html初始化调用js函数
  18. RationalDMIS7.1定制报告(Excel模板制作)
  19. java整理快捷鍵_常用Eclipse快捷键整理,提高效率
  20. 非香农类信息不等式_信息论

热门文章

  1. CorelDRAW教程分享:绘制流程图简单方法分享
  2. # Logistics Regression
  3. 服务器ip显示未识别,Win7桌面右下角提示“未识别的网络”如何解决?
  4. Spring Boot (Filter)过滤器的实现以及使用场景
  5. Alice In Wonderland notes
  6. remote: Repository not found. fatal: repository ‘xxxxxxx‘ not found
  7. SpringBoot:概述,注解,搭建,部署
  8. R语言绘制柱状图(bar plot)
  9. 基于Android平台的监控端和被监控端系统
  10. Deeplearning for NLP (简介)