zoukankan      html  css  js  c++  java
  • spring支持的websocket

    首发:个人博客

    必须说明:这篇博文只用于自己记录,使用spring的websocket支持一定要看官方文档,权威又简明,不推荐看不专业又啰嗦的国产博文。

    已尝试了两种方法,当然,不管哪种方法都要先添加maven依赖:

    <dependency>  
       <groupId>org.springframework</groupId>  
       <artifactId>spring-websocket</artifactId>  
    </dependency>  
    <dependency>  
       <groupId>org.springframework</groupId>  
       <artifactId>spring-messaging</artifactId>  
    </dependency>  

    <dependency>
        <groupId>javax.websocket</groupId>
        <artifactId>javax.websocket-api</artifactId>
        <version>1.0</version>
    </dependency>

    第一种方法,对应文档中的25.2这一节:
    1)声明个Handler组件:

    @Component
    public class MyHandler extends TextWebSocketHandler {

        @Override
        public void handleTextMessage(WebSocketSession session, TextMessage message) {
            try {
                session.sendMessage(message);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }

    2)在spring配置文件中配置该组件,注意要写在springmvc的配置文件中而不是spring主配置文件中:

        <!-- websocket配置1 -->
        <websocket:handlers>
            <websocket:mapping path="/myHandler" handler="myHandler"/>
        </websocket:handlers>

    当然,添加这段配置之前要在xml的根节点beans节点上补充这个声明让spring认识websocket前缀:

        xmlns:websocket="http://www.springframework.org/schema/websocket"

    3)这就OK了


    第二种方法,对应文档中的25.4这一节:
    实际是参考了官方的引导文档(一定要看),然后基于参考手册把java配置改为xml配置了。
    1)在某个controller中声明:

        @MessageMapping("/say")
        @SendTo("/topic/greetings")
        public String greeting(String message) throws Exception {
            return message;
        }

    2)在springmvc配置文件中添加:

        <websocket:message-broker application-destination-prefix="/app">
            <websocket:stomp-endpoint path="/hello">
                <websocket:sockjs />
            </websocket:stomp-endpoint>
            <websocket:simple-broker prefix="/topic" />
        </websocket:message-broker>

    3)测试的页面太长了就不贴了,到这里找吧,在页面的中下部分。
    如果懒得找就看官方提供的示例程序中测试页面

    总结:
    websocket的意义在让浏览器和服务器保持长连接。
    在websocket之前如果想保持长连接,或者采用轮询的方法,或者采用服务器端阻塞的方法,显然都浪费性能。
    如果用服务器端阻塞的话,编程中读请求(阻塞的)和写请求(由用户操作触发)也是分开的。
    websocket直接就分开它们俩了,浏览器随时可以向服务器中写指令,服务器也随时可以向浏览器写指令,两者都有触发函数监听对方。
    这是对无状态的http协议非常重要的补充。
    html5技术很大方面就是让B/S自带富客户端编程元素,比如本地存储,长连接这些,这也是单页面程序兴起的重要原因。
    真正是一个页面就是一个程序,有界面显示,有操作控件,有临时数据,有持久数据,有与服务器保持的连接。

    长期欢迎项目合作机会介绍,项目收入10%用于酬谢介绍人。新浪微博:@冷镜,QQ:908789432。
  • 相关阅读:
    详解 Python3 正则表达式(四)
    详解 Python3 正则表达式(一)
    Python之禅
    人生感悟
    详解 Python3 正则表达式(五)
    作用域与带有循环变量的默认参数相比较问题
    详解 Python3 正则表达式(三)
    python学习笔记:第三天(数字)
    python学习笔记:第四天( 字符串)
    python学习笔记:第二天(基本数据类型)
  • 原文地址:https://www.cnblogs.com/zidafone/p/4744290.html
Copyright © 2011-2022 走看看