zoukankan      html  css  js  c++  java
  • SpringBoot WS


    #####http://localhost:8080/websocket/index
    ##########################################
    ##########################################
    ##########################################


    1、pom.xml

      <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>


      <!-- 模板引擎 -->
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
      </dependency>

    2、SpringApplication

      @EnableWebSocket
      @SpringBootApplication
      public class WxdemoApplication {

        public static void main(String[] args) {
          SpringApplication.run(WxdemoApplication.class, args);
        }

        @Bean
        public ServerEndpointExporter serverEndpointExporter(){
          return new ServerEndpointExporter();
        }

    }

    3、WebsocketEndpoint

      @Component
      @ServerEndpoint(value ="/websocket")
      public class WebsocketEndpoint {
        //存放该服务器该ws的所有连接。用处:比如向所有连接该ws的用户发送通知消息。
        private static CopyOnWriteArraySet<WebsocketEndpoint> sessions = new CopyOnWriteArraySet<>();

        private Session session;

        @OnOpen
        public void onOpen(Session session){
          System.out.println("java websocket:打开连接");
          this.session = session;
          sessions.add(this);
        }

        @OnClose
        public void onClose(Session session){
          System.out.println("java websocket:关闭连接");
          sessions.remove(this);
        }

        @OnMessage
        public void onMessage(Session session,String message) throws IOException {
          System.out.println("java websocket 收到消息:"+message);
          session.getBasicRemote().sendText("后台接收到您发的消息:"+message);
        }

        @OnError
        public void onError(Session session,Throwable error){
          System.out.println("java websocket 出现错误");
        }

        public Session getSession() {
          return session;
        }

        public void setSession(Session session) {
          this.session = session;
        }

    }


    4、application.properties


      #thymeleaf配置
      #是否启用模板缓存。
      spring.thymeleaf.cache=false
      #是否为Web框架启用Thymeleaf视图解析。
      spring.thymeleaf.enabled=true
      #在SpringEL表达式中启用SpringEL编译器。
      spring.thymeleaf.enable-spring-el-compiler=true
      #模板文件编码。
      spring.thymeleaf.encoding=UTF-8
      #要应用于模板的模板模式。另请参见Thymeleaf的TemplateMode枚举。
      spring.thymeleaf.mode=HTML5
      #在构建URL时添加前缀以查看名称的前缀。
      spring.thymeleaf.prefix=classpath:/templates/
      #Content-Type写入HTTP响应的值。
      spring.thymeleaf.servlet.content-type=text/html
      #在构建URL时附加到视图名称的后缀。
      spring.thymeleaf.suffix=.html


    5、thymeleaf
      ######resources/websocket/index.html


    <!doctype html>
    <html xmlns:th="http://www.thymeleaf.org">
      <head>
      <meta charset="utf-8"></meta>
      <title>websocket</title>
    </head>
    <body>
      hello websocket<br/>
      <input id="input_id" type="text" /><button onclick="sendMessage()">发送</button>
      <button onclick="closeWebsocket()">关闭</button>
      <div id="message_id"></div>
    </body>
      <script type="text/javascript">
        document.getElementById('input_id').focus();
        var websocket = null;
        //当前浏览前是否支持websocket
        if("WebSocket" in window){
        var url = "ws://127.0.0.1:8080/websocket";
          websocket = new WebSocket(url);
        }else{
          alert("浏览器不支持websocket");
        }

        websocket.onopen = function(event){
          setMessage("打开连接");
        }

        websocket.onclose = function(event){
          setMessage("关闭连接");
        }

        websocket.onmessage = function(event){
          setMessage(event.data);
        }

        websocket.onerror = function(event){
          setMessage("连接异常");
        }

        //监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常。
        window.onbeforeunload = function(){
          closeWebsocket();
        }

        //关闭websocket
        function closeWebsocket(){
          //3代表已经关闭
          if(3!=websocket.readyState){
            websocket.close();
          }else{
          alert("websocket之前已经关闭");
          }
        }

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

        //发送消息
        function sendMessage(){
          //1代表正在连接
          if(1==websocket.readyState){
          var message = document.getElementById('input_id').value;
            setMessage(message);
            websocket.send(message);
          }else{
            alert("websocket未连接");
          }
        document.getElementById('input_id').value="";
        document.getElementById('input_id').focus();
        }
    </script>
    </html>

    6、Controller
    #####http://localhost:8080/websocket/index

      @RequestMapping("websocket")
      @Controller
      public class WebsocketController {

        private static final String INDEX = "websocket/index";

        @RequestMapping("index")
        public ModelAndView index(){
          return new ModelAndView(INDEX);
        }
    }

  • 相关阅读:
    FZU 2112 并查集、欧拉通路
    HDU 5686 斐波那契数列、Java求大数
    Codeforces 675C Money Transfers 思维题
    HDU 5687 字典树插入查找删除
    HDU 1532 最大流模板题
    HDU 5384 字典树、AC自动机
    山科第三届校赛总结
    HDU 2222 AC自动机模板题
    HDU 3911 线段树区间合并、异或取反操作
    CodeForces 615B Longtail Hedgehog
  • 原文地址:https://www.cnblogs.com/smallfa/p/12925044.html
Copyright © 2011-2022 走看看