2017-12-01 7 views
0

높이 요-X에서 StompServerHandlers 처리 나는내가 VERT-X 3.5.0 사용하고

내 자바 코드는 다음되는 웹 소켓 서버로 StompServer를 사용하려면 방법 :

import io.vertx.core.AbstractVerticle; 
import io.vertx.core.http.HttpServerOptions; 
import io.vertx.core.logging.Logger; 
import io.vertx.core.logging.LoggerFactory; 
import io.vertx.ext.stomp.StompServer; 
import io.vertx.ext.stomp.StompServerHandler; 
import io.vertx.ext.stomp.StompServerOptions; 

StompServer server = StompServer.create(vertx, new StompServerOptions() 
       .setPort(-1) 
       .setWebsocketBridge(true) 
       .setWebsocketPath("/stomp")) 
       .handler(StompServerHandler.create(vertx) 
       .receivedFrameHandler(event -> { 
        LOG.info(String.format("frame is %s", event.frame().getBodyAsString())); 
       }) 
       .beginHandler(event -> { 
        LOG.info("Begin event"); 
       }) 
       .connectHandler(event -> { 
        LOG.info("Connect event"); 
       }) 
       .subscribeHandler(event -> { 
        LOG.info("Subscribe event"); 
       })); 

     vertx.createHttpServer(
       new HttpServerOptions().setWebsocketSubProtocols("v10.stomp, v11.stomp, v13.stomp") 
     ) 
       .websocketHandler(server.webSocketHandler()) 
       .listen(8080); 

서버 실행 중이며 핸드 셰이크 요청과 메시지를 수신 할 수 있습니다. 나는

Server received request: /stomp 
[id: 0x1f899ae3, L:/127.0.0.1:8080 - R:/127.0.0.1:42550] WebSocket version V13 server handshake 
WebSocket version 13 server handshake key: Qe8G85Aw1PwuQbWKPyJSrg==, response: VQVnKr2Jp8RuK/vltKb7XqBiMTU= 
Decoding WebSocket Frame opCode=1 
Decoding WebSocket Frame length=7 

웹 소켓 클라이언트에서 확장 된 서버 로그에서 볼하지만 작동하지 않습니다 핸들러 (receivedFrameHandler, beginHandler, connectHandler, subscribeHandler)를 선언했다. 어떻게 그들을 다루는가?

답변

1

웹 소켓을 사용하는 클라이언트가 Stomp 서버와 상호 작용할 수있게 해주는 WebSocket Stomp 브리지를 구성하고 있습니다. 그러나이 클라이언트는 STOMP 프레임을 전송해야합니다 (STOMP 프레임을 기대합니다). 일반적으로

:

STOMP 클라이언트가 당신이 STOMP 트랜잭션을 시작할 때 beginEvent가 호출하는 서버 에 연결할 때 connectEvent가 호출됩니다.

웹 소켓 클라이언트가 프레임 (CONNECT, BEGIN ...)을 보내지 않으면 콜백이 호출되지 않습니다.

CONNECT 프레임 here의 예를 볼 수 있습니다.

+0

나는 당신이 말하는 것에 대해 이해하고있는 것 같습니다. 웹 소켓을 통해 STOMP 서버에 대한 일반 웹 소켓 클라이언트를 사용할 수 없습니다. 아니면 사용할 수 있지만 특정 STOMP 프레임을 websocket 프로토콜을 통해 보내야합니까? 그리고 서버가 간단한 웹 소켓 프레임에서 어떤 반응을 보이는지는 중요하지 않습니까? – b3lowster

+0

Stomp 서버는 전송 프로토콜 (TCP - 기본값 또는 WebSocket)이 무엇이든간에 STOMP 프레임을 기다리고 있습니다. – Clement