`
wiselyman
  • 浏览: 2076972 次
  • 性别:
  • 来自: 合肥
博主相关
  • 博客
  • 微博
  • 相册
  • 收藏
  • 博客专栏
    点睛spring4.1
    浏览量:80745
    点睛spring mvc4...
    浏览量:129940
    社区版块
    • ( 11)
    • ( 19)
    • ( 0)
    存档分类
    最新评论

    spring4.0系列9-websocket简单应用

    spring4.0系列9-websocket简单应用

     

    spring 4.0的一个最大更新是增加了websocket的支持。websocket提供了一个在web应用中的高效、双向的通讯,需要考虑到客户端(浏览器)和服务器之间的高频和低延时消息交换。一般的应用场景有:在线交易、游戏、协作、数据可视化等。

     

    使用websocket需要考虑的浏览器的支持(ie<10不支持),目前主流的浏览器都能很好的支持websocket。

    websocket协议中有一些子协议,可以从更高的层次实现编程模型,就像我们使用http而不是tcp一样。这些子协议有stomp,wamp等。

     

    本教程只考虑websocket的简单实用,包含spring对jsr-356的支持及spring websocket api。

    spring4.0系列9-欧洲杯足彩官网

    java api for websocket已经是java ee 7的一部分。它定义了两类endpoit(都是endpoint类的子类),使用注解标识@clientendpoint和@serverendpoint。

     

    1.1 servlet容器扫描初始化

    通过spring初始化一个endpoint,只需配置一个springconfigurator在类上的@serverendpoint注解上。

     

    import javax.websocket.server.serverendpoint;
    import org.springframework.web.socket.server.endpoint.springconfigurator;
    @serverendpoint(value = "/echo", configurator = springconfigurator.class);
    public class echoendpoint {
      private final echoservice echoservice;
      @autowired
      public echoendpoint(echoservice echoservice) {
        this.echoservice = echoservice;
      }
      @onmessage
      public void handlemessage(session session, string message) {
        // ...
      }
    }

     上例假设springcontextloaderlistener用来加载配置,这是个典型的web应用。servlet容器将通过扫描@serverendpoint和springconfigurator初始化一个新的websocket会话。

     1.2 spring 初始化

    如果你想使用一个单独的实例而不使用servlet容器扫描,将echoendpoint类声明称一个bean,并增加一个serverendpointexporter的bean:

    import org.springframework.web.socket.server.endpoint.serverendpointexporter;
    @configuration
    public class endpointconfig {
      @bean
      public echoendpoint echoendpoint() {
        return new echoendpoint(echoservice());
      }
      @bean
      public echoservice echoservice() {
        // ...
      }
      @bean
      public serverendpointexporter endpointexporter() {
        return new serverendpointexporter();
      }
    }

     

     echoendpoint 可以通过endpointregistration发布:

    import org.springframework.web.socket.server.endpoint.serverendpointexporter;
    import org.springframework.web.socket.server.endpoint.serverendpointregistration;
    @configuration
    public class endpointconfig {
      @bean
      public endpointregistration echoendpoint() {
        return new endpointregistration("/echo", echoendpoint.class);
      }
      @bean
      public serverendpointexporter endpointexporter() {
        return new serverendpointexporter();
      }
      // ..
    }

     本例源码:

    spring websocket api提供了sockjs的支持,且有些容器如jetty 9目前还没有对jsr-356的支持,所以有spring websocket api是必要的。

     

    spring websocket api的核心接口是websockethandler。下面是一个处理文本消息的handler的实现:

    import org.springframework.web.socket.adapter.textwebsockethandleradapter;
    public class echohandler extends textwebsockethandleradapter {
      @override
      public void handletextmessage(websocketsession session, textmessage message) throws exception {
        session.sendmessage(message);
      }
    }

     

    websockethandler可以通过websockethttprequesthandler插入到spring mvc里:

    import org.springframework.web.socket.server.support.websockethttprequesthandler;
    @configuration
    public class webconfig {
      @bean
      public simpleurlhandlermapping handlermapping() {
        map urlmap = new hashmap();
        urlmap.put("/echo", new websockethttprequesthandler(new echohandler()));
        simpleurlhandlermapping hm = new simpleurlhandlermapping();
        hm.seturlmap(urlmap);
        return hm;
      }
    }

     sockjs服务器端的支持

    sockjs是一个脚本框架,它提供类似于websocket的编程模式但是可以适应不同的浏览器(包括不支持websocket的浏览器)。

     

    开启sockjs的支持,声明一个sockjsservice,和一个url映射,然后提供一个websockethandler来处理消息。虽然我们是哟个sockjs我们开发的方式是一样的,但是随着浏览器的不同传输的协议可以是http streaming,long polling等。

     

    import org.springframework.web.socket.sockjs.sockjsservice;
    // ...
    @configuration
    public class webconfig {
      @bean
      public simpleurlhandlermapping handlermapping() {
        sockjsservice sockjsservice = new defaultsockjsservice(taskscheduler());
        map urlmap = new hashmap();
        urlmap.put("/echo/**", new sockjshttprequesthandler(sockjsservice, new echohandler()));
        simpleurlhandlermapping hm = new simpleurlhandlermapping();
        hm.seturlmap(urlmap);
        return hm;
      }
      @bean
      public threadpooltaskscheduler taskscheduler() {
        threadpooltaskscheduler taskscheduler = new threadpooltaskscheduler();
        taskscheduler.setthreadnameprefix("sockjs-");
        return taskscheduler;
      }
    }

     

    在我们实际使用中我们会使用websocketconfigurer集中注册websocket服务:

    @configuration
    @enablewebmvc
    @enablewebsocket//开启websocket
    public class webconfig extends webmvcconfigureradapter implements websocketconfigurer {
    	@override
    	public void registerwebsockethandlers(websockethandlerregistry registry) {
    		registry.addhandler(echowebsockethandler(), "/echo"); //提供符合w3c标准的websocket数据
    		registry.addhandler(snakewebsockethandler(), "/snake");
    		registry.addhandler(echowebsockethandler(), "/sockjs/echo").withsockjs();//提供符合sockjs的数据
    		registry.addhandler(snakewebsockethandler(), "/sockjs/snake").withsockjs();
    	}
    	@bean
    	public websockethandler echowebsockethandler() {
    		return new echowebsockethandler(echoservice());
    	}
    	@bean
    	public websockethandler snakewebsockethandler() {
    		return new perconnectionwebsockethandler(snakewebsockethandler.class);
    	}
    	@bean
    	public defaultechoservice echoservice() {
    		return new defaultechoservice("did you say \"%s\"?");
    	}
    	// allow serving html files through the default servlet
    	@override
    	public void configuredefaultservlethandling(defaultservlethandlerconfigurer configurer) {
    		configurer.enable();
    	}
    }

      

    sockjs客户端代码:

    ws = new sockjs(url, undefined, {protocols_whitelist: transports}) ;   //初始化 websocket
             
    ws.onopen = function () {
                    setconnected(true);
                    log('info: connection opened.');
                };
    ws.onmessage = function (event) {
                    log('received: '   event.data); //处理服务端返回消息
                };
    ws.onclose = function (event) {
                    setconnected(false);
                    log('info: connection closed.');
                    log(event);
                };
     ws.send(message);//向服务端发送消息

     

     程序用maven打成war后用tomcat 8发布查看效果。

    本例源码:

     

    新书推荐《javaee开发的颠覆者: spring boot实战》,涵盖spring 4.x、spring mvc 4.x、spring boot企业开发实战。

     

    京东地址:

    当当地址:

    亚马逊地址: 

    淘宝地址:

     

    或自己在京东、淘宝、亚马逊、当当、互动出版社搜索自选。

     


    • (20.8 kb)
    • 下载次数: 1892
    • (32.3 kb)
    • 下载次数: 3882
    分享到:
    |
    评论
    6 楼 lianghuado 2018-05-31  
     
    5 楼 2016-09-27  
    感谢!
    4 楼 2016-04-21  
    能用ehcache不?  我是spring3里面整合websocket;
    运行正常 ,就是ehcache失效了!
    3 楼 2015-08-20  
    alert('hi');
    2 楼 2015-08-20  
    [u][u]
    引用
    引用
    引用
    引用
    引用
    [/u][/u]
    • [list]
    • [*][list]
    • [*][*][list]
    • [*][*][*][list]
    • [*][*][*][*][list]
    • [*][*][*][*][*][list]
    • [*][*][*][*][*][*][list]
    • [*][*][*][*][*][*][*][list]
    • [*][*][*][*][*][*][*][*][list]
    • [*][*][*][*][*][*][*][*][*][list]
    • [*][*][*][*][*][*][*][*][*][*][list]
    • [*][*][*][*][*][*][*][*][*][*][*][list]
    • [*][*][*][*][*][*][*][*][*][*][*][*]
    • [*][*][*][*][*][*][*][*][*][*][*]
  • [*][*][*][*][*][*][*][*][*][*][/list]
  • [*][*][*][*][*][*][*][*][*][/list]
  • [*][*][*][*][*][*][*][*][/list]
  • [*][*][*][*][*][*][*][/list]
  • [*][*][*][*][*][*][/list]
  • [*][*][*][*][*][/list]
  • [*][*][*][*][/list]
  • [*][*][*][/list]
  • [*][*][/list]
  • [*][/list]
  • [/list]
  • [/list]
    1 楼 2014-05-07  
    这个‘本例源码:spring-websocket-test-master.zip’是基于tomcat8.0的maven项目?

    相关推荐

      该插件旨在使spring 4.0中引入的websocket支持可用于grails应用程序。 您也可以使用相应的spring docs / apis / samples作为参考。 在本自述文件中多次提到了这一点,因为其中详细解释了所有内容。 grails版本...

      spring 4.0的一个最大更新是增加了websocket的支持。websocket提供了一个在web应用中的高效、双向的通讯,需要考虑到客户端(浏览器)和服务器之间的高频和低延时消息交换。一般的应用场景有:在线交易、游戏、协作...

      spring websocket 示例 描述 这是一个使用 spring websocket 4.0.0 release 的 websocket 服务器的小...安装应用程序的最简单方法是将打包的 war 文件复制到 websocket compliant server,例如 jetty 或 tomcat。 享受

      概述演示 spring framework 4.0 中的 spring websocket 和 sockjs 支持。 重要提示: master分支包含使用 spring 的websockethandler示例,包括 sockjs 回退选项。 endpoint分支包含使用 jsr-356 endpoint和@...

      spring 4.0引入了众多java开发者翘首以盼的基于groovy bean的配置、html 5/websocket支持等新功能,全面支持java 8.0,*低要求是java 6.0。这些新功能实用性强、易用性高,可大幅降低java应用,特别是java web应用...

      ===本人看过,绝不忽悠,放心下载===spring 4.0是spring在积蓄4年后,隆重推出的一个重大升级版本,进一步加强了spring作为java领域*开源平台的翘楚地位。spring 4.0引入了众多java开发者翘首以盼的基于groovy bean...

      spring 4.0引入了众多java开发者翘首以盼的基于groovy bean的配置、html 5/websocket支持等新功能,全面支持java 8.0,*低要求是java 6.0。这些新功能实用性强、易用性高,可大幅降低java应用,特别是java web应用...

      spring 4.0引入了众多java开发者翘首以盼的基于groovy bean的配置、html 5/websocket支持等新功能,全面支持java 8.0,最低要求是java 6.0。这些新功能实用性强、易用性高,可大幅降低java应用,特别是java web应用...

      spring 4.0引入了众多java开发者翘首以盼的基于groovy bean的配置、html 5/websocket支持等新功能,全面支持java 8.0,*低要求是java 6.0。这些新功能实用性强、易用性高,可大幅降低java应用,特别是java web应用...

      spring 4.0引入了众多java开发者翘首以盼的基于groovy bean的配置、html 5/websocket支持等新功能,全面支持java 8.0,最低要求是java 6.0。这些新功能实用性强、易用性高,可大幅降低java应用,特别是java web应用...

      spring 4.0引入了众多java开发者翘首以盼的基于groovy bean的配置、html 5/websocket支持等新功能,全面支持java 8.0,最低要求是java 6.0。这些新功能实用性强、易用性高,可大幅降低java应用,特别是java web应用...

      spring 4.0引入了众多java开发者翘首以盼的基于groovy bean的配置、html 5/websocket支持等新功能,全面支持java 8.0,最低要求是java 6.0。这些新功能实用性强、易用性高,可大幅降低java应用,特别是java web应用...

      spring 4.0引入了众多java开发者翘首以盼的基于groovy bean的配置、html 5/websocket支持等新功能,全面支持java 8.0,最低要求是java 6.0。这些新功能实用性强、易用性高,可大幅降低java应用,特别是java web应用...

      spring 4.0引入了众多java开发者翘首以盼的基于groovy bean的配置、html 5/websocket支持等新功能,全面支持java 8.0,最低要求是java 6.0。这些新功能实用性强、易用性高,可大幅降低java应用,特别是java web应用...

      spring 4.0引入了众多java开发者翘首以盼的基于groovy bean的配置、html 5/websocket支持等新功能,全面支持java 8.0,*低要求是java 6.0。这些新功能实用性强、易用性高,可大幅降低java应用,特别是java web应用...

      spring 4.x企业应用开发实战 pring 4.0是spring在积蓄4年后,隆重推出的一个重大升级版本,进一步加强了spring作为java领域*开源平台的翘楚地位。spring 4.0引入了众多java开发者翘首以盼的基于groovy bean的配置、...

      spring 4.0引入了众多java开发者翘首以盼的基于groovy bean的配置、html 5/websocket支持等新功能,全面支持java 8.0,*要求是java 6.0。这些新功能实用性强、易用性高,可大幅降低java应用,特别是java web应用开发...

    global site tag (gtag.js) - google analytics
    网站地图