zoukankan      html  css  js  c++  java
  • spring-websocket的搭建

    Apach Tomcat 8.0.3+MyEclipse+maven+JDK1.7

    spring4.0以后加入了对websocket技术的支持,撸主目前的项目用的是SSM(springMVC+spring+MyBatis)框

    架,所 以肯定要首选spring自带的websocket

    1 在maven的pom.xml中加入websocket所依赖的jar包

    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.4.0</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.4.0</version>
    </dependency>
    <dependency>
       <groupId>org.springframework</groupId>
       <artifactId>spring-websocket</artifactId>//version须和spring mvc的version保持一致,否则会出现问题
       <version>4.0.5.RELEASE</version>
    </dependency>
    <dependency>
       <groupId>org.springframework</groupId>
       <artifactId>spring-messaging</artifactId>
       <version>4.0.5.RELEASE</version>
    </dependency>
    2 更新spring-mvc.xml中namespace.xsd的版本
     2.1<beans xmlns="http://www.springframework.org/schema/beans"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns:websocket="http://www.springframework.org/schema/websocket"
         xsi:schemaLocation="
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/websocket http://www.springframework.org/schema/websocket/spring-websocket.xsd">

      处理类和握手协议的spring配置(applicationContext.xml文件)
    <bean id="websocket" class="com.xl.websocket.handler"/>
    
    <websocket:handlers>
        <websocket:mapping path="/websocket" handler="websocket"/>
        <websocket:handshake-interceptors>
        <bean class="com.xl.websocket.HandshakeInterceptor"/>
        </websocket:handshake-interceptors>
       <websocket:sockjs/> </websocket:handlers>
    2.2webconfig
      
        @Override
         public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
            registry.addHandler(new HelloHandler(), "/hello").addInterceptors(new HandshakeInterceptor()).withSockJS().setHttpMessageCacheSize(20000);

        }
     
    3 创建握手(handshake)接口
    public class HandshakeInterceptor extends HttpSessionHandshakeInterceptor {
     @Override
     public boolean beforeHandshake(ServerHttpRequest arg0,
       ServerHttpResponse arg1, WebSocketHandler arg2,
       Map<String, Object> arg3) throws Exception {
      
      System.out.println("---- Before Handshake ----");
      return super.beforeHandshake(arg0, arg1, arg2, arg3);
     }
     
     @Override
     public void afterHandshake(ServerHttpRequest request,
       ServerHttpResponse response, WebSocketHandler wsHandler,
       Exception ex) {
      
      System.out.println("---- After Handshake ----");
      super.afterHandshake(request, response, wsHandler, ex);
     }
    }

    4  创建websocket处理类

    public class HelloHandler extends TextWebSocketHandler {
     
     public static List<WebSocketSession> users;
     static{
      users = new ArrayList<WebSocketSession>();
     }
     
     @Override
        public void handleTextMessage(WebSocketSession session, TextMessage message) {
            //接收到客户端消息时调用
            System.out.println("text message: " + session.getId() + "-" + message.getPayload());
        }

        @Override
        public void afterConnectionEstablished(WebSocketSession session)
                throws Exception {
            // 与客户端完成连接后调用
            System.out.println("afterConnectionEstablished");
            System.out.println("getId:" + session.getId());
            System.out.println("getLocalAddress:" + session.getLocalAddress().toString());
            System.out.println("getTextMessageSizeLimit:" + session.getTextMessageSizeLimit());
            System.out.println("getUri:" + session.getUri().toString());
            System.out.println("getPrincipal:" + session.getPrincipal());
            System.out.println(soslistService.getsss());
            session.sendMessage(new TextMessage("你好"));
           
            users.add(session);
        }

        @Override
        public void handleTransportError(WebSocketSession session,
                Throwable exception) throws Exception {
            // 消息传输出错时调用
            System.out.println("handleTransportError");
        }

        @Override
        public void afterConnectionClosed(WebSocketSession session,
                CloseStatus closeStatus) throws Exception {
            // 一个客户端连接断开时关闭
            System.out.println("afterConnectionClosed");
        }

        @Override
        public boolean supportsPartialMessages() {
            // TODO Auto-generated method stub
            return false;
        }
    }

     
     
     
  • 相关阅读:
    Unable To Open Database After ASM Upgrade From Release 11.1 To Release 11.2
    11g Understanding Automatic Diagnostic Repository.
    How to perform Rolling UpgradeDowngrade in 11g ASM
    Oracle 11.2.0.2 Patch 说明
    Pattern Matching Metacharacters For asm_diskstring
    Steps To MigrateMove a Database From NonASM to ASM And ViceVersa
    Upgrading ASM instance from Oracle 10.1 to Oracle 10.2. (Single Instance)
    OCSSD.BIN Process is Running in a NonRAC Environment
    Steps To MigrateMove a Database From NonASM to ASM And ViceVersa
    On RAC, expdp Removes the Service Name [ID 1269319.1]
  • 原文地址:https://www.cnblogs.com/difme/p/5584204.html
Copyright © 2011-2022 走看看