• 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);
        }
    }

  • 相关阅读:
    直接插入排序
    安卓突击:隐式、显式Intent
    安卓突击:Android 动画有哪几种?
    安卓突击:ANR
    安卓突击:系统上安装了多种浏览器,能否指定某浏览器访问指定页面
    安卓突击:系统上安装了多种浏览器,能否指定某浏览器访问指定页面
    Android:BroadcastReceiver的基础知识
    安卓突击:service的基础知识
    安卓突击:数据存储方式
    Android突击:常用的五种布局
  • 原文地址:https://www.cnblogs.com/smallfa/p/12925044.html
Copyright © 2020-2023  润新知