ruoyi若依整合websocket

这篇具有很好参考价值的文章主要介绍了ruoyi若依整合websocket。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

注:本文档中的ruoyi框架为前后不分离版本,nginx配置与前后分离版有所不同。

一、导pom,版本需与springboot版本一致

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-websocket</artifactId>
    <version>2.5.15</version>
</dependency>

 如果是新建module,则需要在ruoyi-admin的pom.xml中导入新建的module,否则注解不生效

<dependency>
    <groupId>com.ruoyi</groupId>
    <!-- 新module的名称 -->
    <artifactId>ruoyi-websocket</artifactId>
</dependency>

二、注册websocket

@Configuration
@EnableWebSocket
public class SpringWebSocketConfig implements WebSocketConfigurer {

    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        System.out.println("注册websocket");
        //固定连接路径则使用/ws,如/ws后还有参数,则追加/*通配符
        registry.addHandler(new MyWebSocketHandler(), "/ws/*")//设置连接路径和处理器
                .setAllowedOrigins("*") //允许跨域访问
                .addInterceptors(new MyWebSocketInterceptor());//设置拦截器
    }
}

三、创建拦截器 MyWebSocketInterceptor

public class MyWebSocketInterceptor implements HandshakeInterceptor {
    @Override
    public boolean beforeHandshake(ServerHttpRequest servletRequest, ServerHttpResponse servletResponse, WebSocketHandler wsHandler, Map<String, Object> attributes) throws Exception {
        System.out.println("websocket前置拦截");

        //如果用到Sec-WebSocket-Protocol,可以采用getHeaders().get(key)的方法获取
        if (servletRequest.getHeaders().get("Sec-WebSocket-Protocol") == null) {
            System.out.println("无Sec-WebSocket-Protocol,进行拦截!");
            return false;
        }
        String protocol = servletRequest.getHeaders().get("Sec-WebSocket-Protocol").get(0);

        //如果uri的路径中带有参数,可获取到uri字符串,采用截取的方式处理,最后存入attributes
        String path = servletRequest.getURI().getPath();
        String id = path.substring(path.lastIndexOf('/') + 1);
        attributes.put("id", id);
        System.out.println("设备id:" + id);

        return true;
    }

    @Override
    public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Exception exception) {
        System.out.println("websocket后置拦截");
    }
}

四、创建处理器 MyWebSocketHandler

public class MyWebSocketHandler implements WebSocketHandler {

    //建立新的 socket 连接后回调的方法
    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
        System.out.println("新连接");
        //从session中获取存放的参数
        session.getAttributes().get("id");
    }

    // 接收客户端发送的 Socket
    @Override
    public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) throws Exception {
        // 连接发送的消息
        String msg = message.getPayload().toString();
        // 通过session向连接发送消息
        session.sendMessage(new TextMessage("发送消息"));
    }

    //连接出错时,回调的方法
    @Override
    public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
        System.out.println("收到的错误信息:" + exception);
    }

    //连接关闭时,回调的方法
    @Override
    public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception {
        System.out.println("断开连接");
    }


    // WebSocketHandler 是否处理部分消息 默认返回false即可
    @Override
    public boolean supportsPartialMessages() {
        return false;
    }

}

五、本地启动项目

若依websocket,websocket,spring boot,ruoyi

六、本地环境测试,或者使用在线测试  http://www.websocket-test.com/ 

<!DOCTYPE HTML>
<html>
<head>
    <title>My WebSocket</title>
</head>

<body>
<input id="text" type="text" />
<button onclick="send()">Send</button>
<button onclick="closeWebSocket()">Close</button>
<div id="message"></div>


</body>

<script type="text/javascript">

    let ws = null;
    //判断当前浏览器是否支持WebSocket
    if ('WebSocket' in window) {
        //【非必须】 在ws后面添加了些内容
        var str = 'abc';
        //【非必须】 Sec-WebSocket-Protocol的内容
        var protocol = ['Sec-WebSocket-Protocol的内容']
        ws = new WebSocket("ws://127.0.0.1:14000/ws/" + str, protocol);
    }
    else {
        alert('当前浏览器 Not support websocket')
    }

    //连接发生错误的回调方法
    ws.onerror = function () {
        setMessageInnerHTML("error");
    };

    //连接成功建立的回调方法
    ws.onopen = function(event) {
        setMessageInnerHTML("success");
    }
    //接收到消息的回调方法
    ws.onmessage = function(message) {
        if (typeof(message.data) == 'string') {
            setMessageInnerHTML(message.data);
        }
    }
    //ws连接断开的回调方法
    ws.onclose = function(e) {
        setMessageInnerHTML("close");
    }

    //将消息显示在网页上
    function setMessageInnerHTML(innerHTML) {
        document.getElementById('message').innerHTML +=  innerHTML + '<br/>';
    }

    //关闭连接
    function closeWebSocket() {
        ws.close();
    }


    //发送消息
    function send(msg) {
        if(!msg){
            msg = document.getElementById('text').value;
            document.getElementById('message').innerHTML += "send:" + msg + '<br/>';
            ws.send(msg);
        }
    }
</script>
</html>

 成功连接!

 若依websocket,websocket,spring boot,ruoyi

七、生产环境需配置nginx (本配置为wss版,需监听443,ws版监听80端口即可)

server {
    listen  443 ssl; 
    #监听的域名地址
    server_name        xxxx.com;
    ssl_certificate      cert/xxxx.com.pem;
    ssl_certificate_key  cert/xxxx.com.key;
    ssl_prefer_server_ciphers  on;
    ssl_protocols                   TLSv1 TLSv1.1 TLSv1.2;
    ssl_session_cache               shared:SSL:10m;
    ssl_session_timeout             10m;
    ssl_ciphers ALL:!kEDH!ADH:RC4+RSA:+HIGH:+EXP;

    #监听的路径,对应第二步中的连接路径
    location /ws/ {
      proxy_pass        http://127.0.0.1:14000;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header Host $host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
    }

    # 不添加,则会导致后台管理页面无法登录
    location / {  
      #这里是反向代理的地址,我用的是tomcat默认的8080端口
      proxy_pass http://localhost:14000/login;  
      proxy_set_header Host $host;  
      proxy_set_header X-Real-IP $remote_addr;  
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_connect_timeout 1; 
      proxy_send_timeout 200; 
      proxy_read_timeout 200;
    }  
  }文章来源地址https://www.toymoban.com/news/detail-735159.html

到了这里,关于ruoyi若依整合websocket的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Boot整合WebSocket实现实时通信,前端实时通信,前后端实时通信

    实时通信在现代Web应用中扮演着越来越重要的角色,无论是在线聊天、股票价格更新还是实时通知,WebSocket都是实现这些功能的关键技术之一。Spring Boot作为一个简化企业级应用开发的框架,其对WebSocket的支持也非常友好。本文将详细介绍如何在Spring Boot中整合WebSocket,实现一

    2024年04月27日
    浏览(31)
  • 实时通信应用的开发:Vue.js、Spring Boot 和 WebSocket 整合实践

    目录 1. 什么是webSocket  2. webSocket可以用来做什么? 3. webSocket协议 4. 服务器端 5. 客户端 6. 测试通讯 WebSocket 是一种在单个 TCP连接 上进行全双工通信的协议。WebSocket使得客户端和服务器之间的数据交换变得更加简单,允 许服务端主动向客户端推送数据 。在WebSocket API中,浏览

    2024年02月11日
    浏览(46)
  • 若依(RuoYi-Vue)+Flowable工作流前后端整合教程

    此教程适合若依前后端分离项目,其他项目可以在扩展列表中进行查找。 近期公司里需要对很久以前的RuoYi-Vue前后端分离项目扩展出flowable的功能,当然这个重任也是落在了我的身上(不然也不会有这篇文章),然后我在官网看到了RuoYi-Vue-Flowable这个项目,按照文档提供的迁

    2023年04月21日
    浏览(41)
  • Spring Boot 3 + Vue 3 整合 WebSocket (STOMP协议) 实现广播和点对点实时消息

    🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot 🌺 仓库主页: Gitee 💫 Github 💫 GitCode 💖 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请纠正! WebSocket是一种在Web浏览器与Web服务器之间建立双向通信的协议,而Spring Boot提供了便捷的WebSocket支持

    2024年02月02日
    浏览(40)
  • nbcio-boot移植到若依ruoyi-nbcio平台里一formdesigner部分(一)

    nbcio-boot项目移植到ruoyi-nbcio项目中, 今天主要讲formdesigner的移植 1、把formdesigner的源代码拷贝到component里,并修改成formdesigner,如下: 2、form下的index.vue修改如下: 主要是修改新增,修改按钮的路由到新的formdesigner,还有详情的修改,同时引入preview组件。 3、界面如下:

    2024年02月09日
    浏览(40)
  • 上线Spring boot-若依项目

    所有环境皆关闭防火墙与selinux 服务器功能 主机IP 主机名 服务名称 配置 前端服务器 192.168.231.177 nginx nginx 1C2G 后端服务器+代码打包 192.168.231.178 java java、maven、nodejs 4C8G 数据库/缓存 192.168.231.179 db mysql、redis 2C4G #前端上线完成,但是由于后端还未上线,所以有报错,并且验证

    2024年02月05日
    浏览(33)
  • 初级 - 若依框架 - Java Spring/Spring Boot 项目理解记录

    一般情况下,我们创建对象都是 类名 + 类引用名 = new 类名() 但是如果是不想要 等于号后面的对象实例化操作,那么可以使用 @Autowired 注解,当然这是在使用 Spring 时,才能这样,不然一般情况下,也没法用这个注解。用了这个 @Autowired 注解,会让 Spring 自动帮你托管这个对象

    2024年02月16日
    浏览(36)
  • [Spring Boot 4]若依框架与快速搭建CRUD模板

    若依框架,当下快速构建项目的框架,非常好用,特别是代码生成部分,对增删改查起到了很好的帮助。 若依框架很值得学习,这个是Spring boot版的管理系统,用的技术不是太多同时对新手非常友好,基本上就是spring boot + bootstrap来进行搭建的。 后面还得分析分析这个若依框

    2024年02月09日
    浏览(29)
  • spring boot es | spring boot 整合elasticsearch | spring boot整合多数据源es

    目录 Spring Boot与ES版本对应 Maven依赖 配置类 使用方式 @Test中注入方式 @Component中注入方式 查询文档 实体类 通过ElasticsearchRestTemplate查询 通过JPA查询 保存文档 参考链接 项目组件版本: Spring Boot:2.2.13.RELEASE Elasticsearch:6.8.0 JDK:1.8.0_66 Tips: 主要看第3列和第5列,根据ES版本选择

    2023年04月18日
    浏览(43)
  • Spring整合tomcat的WebSocket详细逻辑(图解)

    主要解决存在的疑问 为什么存在2种spring整合websocket的方式,一种是使用@ServerEndpoint注解的方式,一种是使用@EnableWebSocket注解的方式,这2种有什么区别和联系?可以共存吗?它们实现的原理是什么?它们的各种配置到底是什么意思?@EnableWebSocket是如何完成配置的? 在服务端

    2024年02月07日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包