zoukankan      html  css  js  c++  java
  • Websocket

    websocket主要可以分为服务器端客户端两部分,其中服务器端又可以分为配置服务

    需要的依赖

        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <java.version>1.8</java.version>
            <!--以下两项需要如果不配置,解析themleaft 会有问题-->
            <thymeleaf.version>3.0.2.RELEASE</thymeleaf.version>
            <thymeleaf-layout-dialect.version>2.0.5</thymeleaf-layout-dialect.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <optional>true</optional>
                <scope>runtime</scope>
            </dependency>
            <!--添加对websocket的支持-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-websocket</artifactId>
            </dependency>
            <!--添加对html的支持-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-thymeleaf</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <version>1.5.6.RELEASE</version>
                <optional>true</optional>
                <scope>runtime</scope>
            </dependency>
        </dependencies>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
                <plugin>
                    <groupId>com.spotify</groupId>
                    <artifactId>docker-maven-plugin</artifactId>
                    <version>1.0.0</version>
                    <configuration>
                        <imageName>suyu/${project.artifactId}:${project.version}</imageName>
                        <baseImage>java:8</baseImage>
                        <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
                        <resources>
                            <resource>
                                <targetPath>/</targetPath>
                                <directory>${project.build.directory}</directory>
                                <include>${project.build.finalName}.jar</include>
                            </resource>
                        </resources>
                    </configuration>
                </plugin>
            </plugins>
        </build>

    后端配置

     1 import org.springframework.context.annotation.Bean;
     2 import org.springframework.context.annotation.Configuration;
     3 import org.springframework.web.socket.server.standard.ServerEndpointExporter;
     4 
     5 @Configuration  
     6 public class WebSocketConfig {  
     7     @Bean  
     8     public ServerEndpointExporter serverEndpointExporter(){  
     9         return new ServerEndpointExporter();  
    10     }  
    11 }  

    后端服务

     1 import org.springframework.stereotype.Component;
     2 
     3 import javax.websocket.OnClose;
     4 import javax.websocket.OnMessage;
     5 import javax.websocket.OnOpen;
     6 import javax.websocket.Session;
     7 import javax.websocket.server.ServerEndpoint;
     8 import java.util.concurrent.CopyOnWriteArraySet;
     9 
    10 @Component
    11 @ServerEndpoint("/webSocket")
    12 //@Slf4j
    13 public class WebSocket {
    14     private Session session;
    15     private static CopyOnWriteArraySet<WebSocket> webSocketSet = new CopyOnWriteArraySet<>();
    16 
    17     @OnOpen
    18     public void onOpen(Session session) {
    19         this.session = session;
    20         webSocketSet.add(this);
    21         System.out.println("【websocket消息】:打开连接" + webSocketSet.size());
    22     }
    23 
    24     @OnClose
    25     public void OnClose() {
    26         webSocketSet.remove(this);
    27         System.out.println("【websocket消息】:关闭连接" + webSocketSet.size());
    28     }
    29 
    30     @OnMessage
    31     public void OnMessage(String message) {
    32         System.out.println("【websocket消息】:接收到的消息" + message);
    33     }
    34 
    35     public void sendMessage(String message) {
    36         for (WebSocket webSocket : webSocketSet) {
    37             System.out.println("【websocket消息】:广播的消息" + message);
    38             try {
    39                 webSocket.session.getBasicRemote().sendText(message);
    40             } catch (Exception e) {
    41                 e.printStackTrace();
    42             }
    43         }
    44     }
    45 
    46 }

    前端界面

     1 <!DOCTYPE HTML>
     2 <html>
     3 <head>
     4     <title>WebSocket测试</title>
     5 </head>
     6 <body>
     7 <h1>WebSocket测试</h1>
     8 </body>
     9 <script type="text/javascript">
    10     var websocket = null;
    11     if (!!window.WebSocket && window.WebSocket.prototype.send) {
    12         console.log("当前浏览器支持websocket");
    13         websocket=new WebSocket('ws://127.0.0.1:8086/webSocket');
    14     }else {
    15         console.log("当前浏览器不支持websocket");
    16     }
    17     websocket.onopen=function (evnet) {
    18         console.log("建立连接");
    19     }
    20     websocket.onclose=function (event) {
    21         console.log("关闭连接");
    22     }
    23     websocket.onmessage=function (event) {
    24         console.log("收到消息:"+event.data);
    25     }
    26     websocket.onerror=function (event){
    27         console.log("连接错误");
    28     }
    29 
    30 </script>
    31 </html>

    定时任务

    使用springboot添加定时任务向前端发送信息

     1 import com.zhang.websocket.server.WebSocket;
     2 import org.springframework.scheduling.annotation.Scheduled;
     3 import org.springframework.stereotype.Component;
     4 
     5 
     6 @Component
     7 public class scheduled {
     8     WebSocket webSocket=new WebSocket();
     9     @Scheduled(fixedRate = 1000)
    10     public void pushDataScheduled(){
    11         webSocket.sendMessage("你好啊");
    12     }
    13 }

    注:添加定时任务需要在spring启动类前加入注解

    @EnableScheduling//定时任务

    效果图 

  • 相关阅读:
    自动化系列-pyppeteer安装
    用python做一个可视化生成二维码的工具
    Python第三方包之DingDingBot
    封装属于自己的Python包
    sqlldr使用
    MS MQ 消息队列
    PDF打印
    oracle 存储过程编辑 卡死
    winrar 压缩文件方法
    数值 转换 成 带千位符的数值,且转成大写
  • 原文地址:https://www.cnblogs.com/superslow/p/9778851.html
Copyright © 2011-2022 走看看