Spring Boot 3使用Spring WebFlux + WebSocket(简单实现)

效果

alt

为什么要使用 Spring WebFlux?

一部分答案是需要一个非阻塞的网络堆栈来处理少量线程的并发,并使用更少的硬件资源进行扩展。使用Servlet非阻塞I/O,远离Servlet API 的其余部分,因为他们的通信是同步的(Filter, Servlet) 或阻塞的 (getParameter, getPart)。Spring WebFlux是一个新的通用 API 作为跨任何非阻塞运行时的基础的动机。这很重要,因为服务器(例如 Netty)在异步、非阻塞中得到了很好的实践。

答案的另一部分是函数式编程。就像在 Java 5 中添加注释创造了机会(例如带注释的 REST 控制器或单元测试)一样,在 Java 8 中添加 lambda 表达式为 Java 中的函数式 API 创造了机会。这对于允许响应式组合异步逻辑的非阻塞应用程序和延续式 API(ReactiveXCompletableFuture和ReactiveX)来说是一个福音。在编程模型级别,Java 8 使 Spring WebFlux 能够提供功能性 Web 端点以及带注释的控制器。

为什么使用WebSocket?

WebSockets 可以使网页具有动态性和交互性。然而,在许多情况下,结合使用 AJAX 和 HTTP 流或长轮询可以提供简单有效的解决方案。

例如,新闻、邮件和社交提要需要动态更新,但每隔几分钟更新一次可能完全没问题。另一方面,协作、游戏和金融应用程序需要更加接近实时。

延迟本身并不是决定性因素。如果消息量相对较小(例如,监控网络故障),HTTP 流式传输或轮询可以提供有效的解决方案。低延迟、高频率和高容量的组合是使用 WebSocket 的最佳案例。

还要记住,在 Internet 上,不受您控制的限制性代理可能会阻止 WebSocket 交互,因为它们未配置为传递标头,或者因为 Upgrade它们关闭了看似空闲的长期连接。这意味着在防火墙内将 WebSocket 用于内部应用程序是一个比面向公众的应用程序更直接的决定

使用Spring WebFlux + WebSocket(简单实现)

导入依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
        </dependency>

创建WebSocketHandler

要创建 WebSocket 服务器,您可以先创建一个WebSocketHandler. 以下示例显示了如何执行此操作:

public class MyWebSocketHandler implements WebSocketHandler {

    @Override
    public Mono<Void> handle(WebSocketSession session) {
        Flux<WebSocketMessage> output = session.receive()
                .map(value -> session.textMessage("发送成功:" + value.getPayloadAsText()));
        return session.send(output);
    }
}

然后你可以将它映射到一个 URL:

@Configuration
@EnableWebFlux
public class WebConfig {

    @Bean
    public HandlerMapping handlerMapping() {
        Map<String, WebSocketHandler> map = new HashMap<>();
        map.put("/path/{roomId}", new MyWebSocketHandler());
        int order = -1; // before annotated controllers
        return new SimpleUrlHandlerMapping(map, order);
    }

}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Spring-Boot WebSocket 可以实现向日葵远程控制。向日葵是一款远程控制软件,可以让我们在远程控制设备时更加方便和灵活。在使用Spring-Boot实现WebSocket时,我们可以结合向日葵的API来达到远程控制的目的。 首先,在Spring-Boot中,我们需要引入WebSocket的依赖。可以在pom.xml文件中添加相应的依赖,例如: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> ``` 然后,我们需要创建WebSocket的配置类。在配置类中,我们可以定义WebSocket的相关设置,例如消息处理器、握手拦截器等。可以参考以下代码: ``` @Configuration @EnableWebSocket public class WebSocketConfig implements WebSocketConfigurer { @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { registry.addHandler(myHandler(), "/myHandler").withSockJS(); } @Bean public WebSocketHandler myHandler() { return new MyHandler(); } } ``` 在以上代码中,`registerWebSocketHandlers` 方法用来注册WebSocket处理器,并指定了处理路径。`MyHandler` 是自定义的消息处理器,可以在其中处理接收到的消息、发送消息等。 接下来,我们可以在处理器中调用向日葵的API,实现远程控制的功能。例如: ``` public class MyHandler extends TextWebSocketHandler { @Override protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { // 处理接收到的消息 String receivedMessage = message.getPayload(); // 调用向日葵API,实现远程控制 // 发送消息 String responseMessage = "远程控制成功"; session.sendMessage(new TextMessage(responseMessage)); } } ``` 在以上代码中,`handleTextMessage` 方法用来处理接收到的消息。我们可以在其中调用向日葵的API实现远程控制的逻辑,并将结果作为消息发送回客户端。 最后,在Spring-Boot的主类中添加 `@EnableWebSocket` 注解,启用WebSocket功能。 综上所述,通过Spring-Boot WebSocket,我们可以便捷地实现向日葵远程控制的功能。使用WebSocket协议进行通信,同时结合向日葵的API,可以让我们更加灵活地远程控制设备。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值