[Spring]-spring websocket 샘플

8169 단어 자바webspring
App 은 위 챗 애플 릿 의 버 전 을 만 들 것 입 니 다.TCP 푸 시 를 사 용 했 기 때문에 웹 소켓 으로 한 번 실현 해 야 합 니 다.spring 의 websocket 을 이용 하여 실현 하 는 것 은 매우 간단 하 다.여기 아주 큰 구덩이 가 있 습 니 다.저 는 웹 소켓 으로 만 연결 되 어 있 기 때문에 spring mvc 를 제거 하고 싶 습 니 다.확실히 연결 이 되 지 않 는 다.여 기 는 웹 소켓 의 원 리 를 좀 알 아야 한다.먼저 http 갔다 tcp 갔 어 요.그래서 spring mvc 는 반드시!
spring mvc 는 여기 서 토론 하지 않 습 니 다.소켓 부분 을 보 세 요.
bom.xml

		
			org.springframework
			spring-core
			${org.springframework.version}
		
		
			org.springframework
			spring-beans
			${org.springframework.version}
		
		
			org.springframework
			spring-web
			${org.springframework.version}
		
		
			org.springframework
			spring-webmvc
			${org.springframework.mvc}
		
		
			org.springframework
			spring-context
			${org.springframework.version}
		
		
			org.springframework
			spring-context-support
			${org.springframework.version}
		
		
			org.springframework
			spring-test
			${org.springframework.version}
		
		  
           org.springframework  
           spring-websocket  
           ${org.springframework.version}  
          
          
           org.springframework  
           spring-messaging  
           ${org.springframework.version}  
        

spring websocket 의 핵심 은 등록 입 니 다.
@Configuration
@EnableWebMvc
@EnableWebSocket
public class WebSocketConfig extends WebMvcConfigurerAdapter implements WebSocketConfigurer{

	@Autowired
	WebSocketHandler webSocketHandler;
	@Autowired
	HandshakeInterceptor handshakeInterceptor;
	
	@Override
	public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
		//      ,   http https        ,     403    failed: Error during WebSocket handshake: Unexpected response code: 403
//        String[] allowsOrigins = {"http://www.xxx.com"};
        String[] allowsOrigins = {"*"};
        
		registry.addHandler(webSocketHandler,"/appwebsocket").addInterceptors(handshakeInterceptor).setAllowedOrigins(allowsOrigins); //  websocket      
        registry.addHandler(webSocketHandler,"/sockjs/appwebsocket").addInterceptors(handshakeInterceptor).setAllowedOrigins(allowsOrigins).withSockJS(); //   websocket     
	}

}

그리고
handshakeInterceptor,
이것 은 악수 할 때 해 야 할 일이 다.
@Component
public class HandshakeInterceptor implements org.springframework.web.socket.server.HandshakeInterceptor{

	/**
	 *        
	 */
	@Override
	public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler,
			Map attributes) throws Exception {
		return true;
	}
	/**
	 *        
	 */
	@Override
	public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler,
			Exception exception) {
		
	}

}

다음은 웹 소켓 Handler 입 니 다.이것 은 모든 요청 의 처리 클래스 입 니 다.
@Component
@Scope("prototype")
public class WebSocketHandler implements org.springframework.web.socket.WebSocketHandler{
	private static final Logger log = LoggerFactory.getLogger(WebSocketHandler.class);
	
	@Autowired
	Config config;
	@Autowired
	AllConnections allConnections;
	@Autowired
	PushCommandClient pushCommandClient;
	
	/**
	 *       
	 */
	@Override
	public void afterConnectionEstablished(WebSocketSession session) throws Exception {
		allConnections.putClientAppIoSession(session);
		log.info("    。。。       ,            :"+allConnections.getAppConnectionSize());
	}

	@Override
	public void handleMessage(WebSocketSession session, WebSocketMessage> socketmessage) throws Exception {
		if (log.isInfoEnabled()) {
			log.info("app  :  handleMessage  app  ");
		}
		if(socketmessage.getPayloadLength()==0){
			log.info("  websocket ,     !!!");
			return;
		}
		JSONObject object = JSON.parseObject(socketmessage.getPayload().toString());
		//  json  ,    。。。
	}

	@Override
	public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
		log.error("    ,    ......",exception);
		if(session.isOpen()){
			session.close();
        }
	}

	@Override
	public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception {
        if (log.isInfoEnabled()) {
			log.info("app  :  afterConnectionClosed       ,       :"+allConnections.getAppConnectionSize());
		}
		allConnections.removeClientAppIoSession(session);
		if (log.isInfoEnabled()) {
			log.info("app    .channel ID  :"+session.getId()+" ip:"+session.getRemoteAddress()+",          :"+allConnections.getAppConnectionSize());
		}
	}

	@Override
	public boolean supportsPartialMessages() {
		return false;
	}
}

마지막 으로 테스트 용 클 라 이언 트 코드 를 첨부 합 니 다!



    
    
    
    
    
    
    
    
    
    
    
    webSocket  
    
        $(function(){
            var websocket;
            if ('WebSocket' in window) {
                alert("WebSocket");
                websocket = new WebSocket("ws://ip:10000/webtcpnode/appwebsocket");
            } else if ('MozWebSocket' in window) {
                alert("MozWebSocket");
                websocket = new MozWebSocket("ws://webtcpnode/appwebsocket");
            } else {
                alert("SockJS");
                websocket = new SockJS("http://127.0.0.1/webtcpnode/sockjs/appwebsocket/");
            }
            websocket.onopen = function (evnt) {
                $("#tou").html("       !")
            };
            websocket.onmessage = function (evnt) {
                $("#msg").html($("#msg").html() + "<br/>" + evnt.data);
            };
            websocket.onerror = function (evnt) {
            };
            websocket.onclose = function (evnt) {
                $("#tou").html("         !")
            }
            $('#send').bind('click', function() {
                send();
            });
            function send(){
                if (websocket != null) {
                    var message = document.getElementById('message').value;
                    websocket.send(message);
                } else {
                    alert('       .');
                }
            }
        });
    





좋은 웹페이지 즐겨찾기