热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

webflux文件服务器,WebFlux_RSocket_server

SpringWebFlux(6):RSocket服务实现RSocket是一种二进制协议,可用于字节流传输,例如TCP,WebSockets

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) 双向消息流,用于源数据更新,断开连接等,可以获取订阅更新后的差额而不是重新获取一遍

181864c111ac444e5aea58690b6172ae.png

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

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写法的不同

7a44e8cd2f9476cddb3f3ecee72c962e.png

设置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



推荐阅读
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 本文讨论了如何使用Web.Config进行自定义配置节的配置转换。作者提到,他将msbuild设置为详细模式,但转换却忽略了带有替换转换的自定义部分的存在。 ... [详细]
  • VueCLI多页分目录打包的步骤记录
    本文介绍了使用VueCLI进行多页分目录打包的步骤,包括页面目录结构、安装依赖、获取Vue CLI需要的多页对象等内容。同时还提供了自定义不同模块页面标题的方法。 ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 本文介绍了Android中的assets目录和raw目录的共同点和区别,包括获取资源的方法、目录结构的限制以及列出资源的能力。同时,还解释了raw目录中资源文件生成的ID,并说明了这些目录的使用方法。 ... [详细]
author-avatar
Panzerkampfwagen-VI_238
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有