当前位置:首页 > 服务端 > SpringCloudGateway笔记(10)-websocket

SpringCloudGateway笔记(10)-websocket

2022年11月06日 21:34:28服务端11

使用SpringCloudGateway的重要功能 – websocket的转发

spring-boot的第一代网关zuul不支持websocket的转发,而在实际应用场景中,websocket作为一个常用功能,这大大限制了zuul的使用

SpringCloudGateway支持websocket的转发

配置websocket的客户端和服务端

客户端页面代码

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8"/>
    <title>Spring Boot Websocket</title>
    <script src="jquery-3.4.1.min.js"></script>
    <script src="sockjs.min.js" type="text/javascript"></script>
    <script src="stomp.min.js" type="text/javascript"></script>
    <script type="text/javascript">
        var stompCient = null;
        var host = "http://127.0.0.1:8801";

        function setConnected(connected) {
            document.getElementById("connectBt").disabled = connected;
            document.getElementById("disconnectBt").disabled = !connected;
            document.getElementById("conversationDiv").style.visibility = connected ? 'visible' : 'hidden';

            $('#response').html();
        }

        function testGet() {

        }

        function connect() {
            console.log("====");
            var socket = new SockJS(host + "/websocket");
            stompCient = Stomp.over(socket);
            stompCient.connect({}, function (frame) {
                setConnected(true);
                console.log("connected: " + frame);
                stompCient.subscribe('/subscribe', function (response) {
                    showResponse(response.body);
                })
            })
        }

        function disconnect() {
            if (stompCient != null) {
                stompCient.disconnect();
            }
            setConnected(false);
            console.log("disconnected");
        }

        function send() {
            var name = $('#name').val();
            var message = $('#message').val();
            stompCient.send("/chat", {}, name + ":" + message);
        }

        function showResponse(message) {
            console.log("===respnse: "+message)
            var respons = $('#response');
            respons.html(message);
        }
    </script>
</head>

<body onload="disconnect();">
<noscript>
    <h2 style="color: #ff0000">not support websocket</h2>
</noscript>
<div>
    <div>
        <button id="test" onabort="testGet()">test</button>
        <p id="resText"></p>
    </div>
    <div>
        <button id="connectBt" onclick="connect()"> connect</button>
        <button id="disconnectBt" onclick="disconnect()">disconnect</button>
    </div>
    <div id="conversationDiv">
        <label>enter your name</label> <input type="text" id="name"/>
        <br>
        <label>enter message</label> <input type="text" id="message"/>
        <button id="send" onclick="send()">send</button>
        <p id="response"></p>
    </div>
</div>

</body>
</html>

服务端配置

WebSocketConfig

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry){
        //客户端连接端点
        registry.addEndpoint("/websocket")
                .setAllowedOrigins("*")
                .withSockJS();
    }
}

WebsocketController

@Slf4j
@RestController
public class WebsocketController {
    @Autowired
    private SimpMessagingTemplate template;


    @MessageMapping("/chat")
    @SendTo("/subscribe")
    public String say(String msg) {
        log.info("websocket msg: {}", msg);
        return msg;
    }

    @GetMapping("/websocket/reply")
    public String msgReply(@RequestParam String msg) {
        log.info("websocket reply: {}", msg);
        template.convertAndSend("/subscribe", msg);
        return msg;
    }
}

配置Gateway,普通的websocket用下面的配置,这里用上面这个配置就可以了

        - id: spring-cloud-client-demo3
          uri: lb://spring-cloud-client-demo
          predicates:
            - Path=/websocket/**
          filters:
            - StripPrefix=1
        - id: spring-cloud-client-demo4
          uri: lb:ws://spring-cloud-client-demo
          predicates:
            - Path=/websocket/**

运行程序

打开页面

SpringCloudGateway笔记(10)-websocket _ JavaClub全栈架构师技术笔记

点击connect连接websocket

SpringCloudGateway笔记(10)-websocket _ JavaClub全栈架构师技术笔记

连接成功 输入消息发送

SpringCloudGateway笔记(10)-websocket _ JavaClub全栈架构师技术笔记

后台同样收到消息

2019-06-29 22:20:35.881  INFO 13880 --- [boundChannel-38] c.m.d.c.websocket.WebsocketController    : websocket msg: a:hello

POSTMAN调用后台发送消息的接口

SpringCloudGateway笔记(10)-websocket _ JavaClub全栈架构师技术笔记

查看页面同样可以收到消息

SpringCloudGateway笔记(10)-websocket _ JavaClub全栈架构师技术笔记

查看chrome的控制台也可以看到相关打印

SpringCloudGateway笔记(10)-websocket _ JavaClub全栈架构师技术笔记
GITHUB代码地址

欢迎关注微信交流
SpringCloudGateway笔记(10)-websocket _ JavaClub全栈架构师技术笔记

作者:yingziisme
来源链接:https://blog.csdn.net/yingziisme/article/details/94591157

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/server/68244.html

分享给朋友:

“SpringCloudGateway笔记(10)-websocket” 的相关文章

SpringBoot整合消息队列工具kafka

SpringBoot整合消息队列工具kafka

一、前言 之前整理了kafka在windows下的安装过程,也通过shell命令进行了消息产生者和消息消费者的创建及消息发送,所以想到把kafka与最流行的SpringBoot的框架进行整合,与项目结合,进行消息的发送。 二、整合开始 1.SpringBoot工程搭建,此处不多讲,可以...

Spring Cloud Feign 如何使用对象参数

概述Spring Cloud Feign 用于微服务的封装,通过接口代理的实现方式让微服务调用变得简单,让微服务的使用上如同本地服务。但是它在传参方面不是很完美。在使用 Feign 代理 GET 请求时,对于简单参数(基本类型、包装器、字符串)的使用上没有困难,但是在使用对象传参时却无法自动的将对象...

Spring Cloud面试问题

Spring Cloud面试问题

问:什么是Spring Cloud?     答: Spring Cloud Stream App Starters是基于Spring Boot的Spring Integration应用程序,提供与外部系统的集成。Spring Cloud Task。...

Spring Cloud实战|3.SpringCloud 整合common模块

Spring Cloud实战|3.SpringCloud 整合common模块

手把手教你从0开始搭建spring cloud alibaba 脚手架,关注公众号“AI码师” 获取项目完整源码 视频地址:视频教程 创建新模块 ams-common 当前目录结构 基础包封装 引入必备依...

Spring Boot 2 快速教程:WebFlux 集成 Mongodb(四)

Spring Boot 2 快速教程:WebFlux 集成 Mongodb(四)

摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! 这是泥瓦匠的第104篇原创 文章工程: * JDK 1.8 * Maven 3.5.2 * Spring Boot 2.1.3.R...

[CXF REST标准实战系列] 二、Spring4.0 整合 CXF3.0,实现测试接口

[CXF REST标准实战系列] 二、Spring4.0 整合 CXF3.0,实现测试接口

Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket Reprint it anywhere u want. 文章Points: 1、介绍RESTful架构风格 2、Sprin...

org.springframework.beans.factory.BeanCreationException

错误:org.springframework.beans.factory.BeanCreationException: Error creating bean with name '/company/list': Injection of resource fields failed;...

Java日志框架-Spring中使用Logback(Spring/Spring MVC)

继上一篇文章http://www.cnblogs.com/EasonJim/p/7800880.html中所集成的是基于Java的普通项目,如果要在Spring和Spring MVC上集成,需要做如下处理: 一、Spring POM: <...

SpringBoot整合WebService

SpringBoot整合WebService

WebService是一个SOA(面向服务的编程)的架构,它是不依赖于语言,不依赖于平台,可以实现不同的语言间的相互调用,通过Internet进行基于Http协议的网络应用间的交互。 其实WebService并不是什么神秘的东西,它就是一个可以远程调用的类,或者说是组件,把你...

SpringBoot一站式启动流程源码分析

SpringBoot一站式启动流程源码分析

揭秘SpringBoot如何做到一行代码启动整个应用 一、前言   由上篇文章我们得知,SpringBoot启动时,就是有很简单的一行代码。那我们可以很清楚的看到这行代码的主角便是SpringApplication了,本文我们就来聊一聊这货,来探寻S...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。