zoukankan      html  css  js  c++  java
  • springboot websocket demo

    springboot基于websocket实现在线聊天

    添加maven依赖

    <?xml version="1.0" encoding="UTF-8"?>

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.5.RELEASE</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>springboot-websocket</artifactId>
    <name>springboot-websocket</name>

    <dependencies>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-websocket</artifactId>
    </dependency>
    </dependencies>

    </project>

    添加websocket配置

    @Configuration
    @EnableWebSocket
    public class MyWebSocketConfig implements WebSocketConfigurer {
        @Override
        public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
            registry.addHandler(myHandler(), "/myHandler").setAllowedOrigins("*");
        }
    
        @Bean
        public WebSocketHandler myHandler() {
            return new MyTextWebSocketHandler();
        }
    }

    实现具体的handler

    public class MyTextWebSocketHandler extends TextWebSocketHandler {
        private Set<WebSocketSession> sessions = new HashSet<>();
    
        @Override
        protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
            if (session.isOpen()) {
                sessions.add(session);
            }
            sendToAll(message);
        }
    
        private void sendToAll(TextMessage message) throws IOException {
            for (WebSocketSession session : sessions) {
                session.sendMessage(message);
            }
        }
    
        @Override
        public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
            sessions.remove(session);
        }
    }

    即可通过ws://localhost:8080/myHandler访问websocket

    添加测试页面:

    <html>
    <script type="text/javascript">
        if ("WebSocket" in window) {
            var ws = new WebSocket("ws://localhost:8080/myHandler");
            ws.onopen = function () {
    
            };
    
            ws.onmessage = function (evt) {
                document.getElementById('messageDiv').innerHTML += evt.data + "</br>";
            };
    
            ws.onclose = function () {
                console.log("close connect");
            };
        } else {
            alert("您的浏览器不支持 WebSocket!");
        }
    
        function send() {
            ws.send(document.getElementById("input").value + ": " + document.getElementById("message").value);
        }
    </script>
    
    </head>
    <body>
    当前用户: <input id="input"/><br/>
    <a href="#" onclick="send();">发送消息</a>: <input id="message"/>
    <div id="messageDiv"></div>
    </body>
    </html>

    即可实现简单的通信功能

  • 相关阅读:
    为Fiddler增加Burp-like Inspector扩展 实现类似Burpsuite爆破、一键重放、编码转换等功能
    SVN常见问题总结一
    手把手教你学SVN
    js基本语法汇总
    最全的常用正则表达式大全
    CSS padding margin border属性详解
    从零开始学习jQuery (五) 事件与事件对象
    js正则表达式语法
    浏览器内部工作原理
    原生AJAX入门讲解(含实例)
  • 原文地址:https://www.cnblogs.com/yytxdy/p/12801015.html
Copyright © 2011-2022 走看看