手机版
你好,游客 登录 注册
背景:
阅读新闻

Spring容器整合WebSocket

[日期:2016-10-25] 来源:Linux社区  作者:canot [字体: ]

WebSocker是一个保持web客户端与服务器长链接的技术。这样在两者通信过程中如果服务器有消息发送给客户端,就无需等待web客户端发送一个请求了(HTTP协议是请求相应式,如果没有Web客户端的请求,服务器是无法对客户端做相应的)。

单独的部署一个WebSocket服务器很简单,只需要几个注解即可。那么当在Spring项目中如何使用WebSocket呢?也行你会想,没什么不同啊。一样通过WebSocket注解就可以了啊。但我们使用Spring的目的就是通过Spring的容器来管理Bean,将WebSocket独立出来如果WebSocket中需要用到Spring容器中的bean该怎么办?

Spring 提供了两种将WebSocket部署在Spring容器中的方法:

方法一:

使用org.springframework.web.socket.server.standard.ServerEndpointExporter.ServerEndpointExporter类。在Spring容器中添加一个该类的实例:

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

Spring容器会去扫描包,将WebSocket加入容器。此时对于WebSocket则使用Spring的注解:

@ServerEndpoint(value="/getLocation",configurator = SpringConfigurator.class)
@Component
public class TransmissionLocationWebSocket {
   xxxx
}

SpringConfigurator.class 为Spring提供的一个类。通过这个类,该WebSocket中就可以注入Spring容器的bean。

方法二:

使用Spring封装的WebSocket接口TextWebSocketHandler。

public class WebSocketHandler extends TextWebSocketHandler {
    /**
     * 连接成功时候
     */
    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception       { 

    }
     /**
      * 连接关闭时候
      */
    @Override
    public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception {

      }
}

将类添加到Spring容器中,并配置:

@Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(myHandler(), "/getLocation").setAllowedOrigins("*");
    }

    @Bean
    public WebSocketHandler myHandler() {
        return new WebSocketHandler();
    }

Spring与WebScoket的配置即如上两个方法。

本文永久更新链接地址http://www.linuxidc.com/Linux/2016-10/136359.htm

linux
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款