2014-04-23 5 views
0

Dropwizard 0.7.0 프레임 워크를 사용하여 긴 폴링 서버를 구현하려고합니다. 부두 통합을 제안했습니다. 인터넷 검색 후, 나는 웹 소켓, 부두 계속, cometd와 같은 것에 혼란스러워했습니다.Dropwizard 0.7.0을 사용하여 긴 폴링 서버 구현

내 질문은 무엇이며, 무엇을 선택해야합니까? 그리고 모든 예제는 정말 감사드립니다!


편집

우리의 서버는 모바일 (IOS, 안드로이드), PC와 웹을 포함하여 많은 고객을 가지고 있습니다. websocket은 웹 브라우저에서만 사용할 수 있습니까?

답변

3

Websocket은 나열한 모든 클라이언트에서 사용할 수 있습니다. 일반적으로 Atmoshphere와 같은 프레임 워크는 다른 유형의 전송 (예 : 웹 소켓 대신 longpolling)으로 다운 그레이드하여 차이를 추상화합니다. 웹 소켓은 롱 폴링이 해결하려고하는 표준, 즉 서버 사이드 푸시입니다.

Dropwizard 0.7.0 용 부두에 웹 소켓을 만들었지 만 DW google 그룹에 연결된 스레드에 대한 읽기 권한이 있습니다.

final ServletRegistration.Dynamic websocket = environment.servlets().addServlet(
      "websocket", 
      new MyWebSocketServlet(
        environment.getObjectMapper(), 
        environment.metrics(), 
        configuration.getKafkaConfig() 
      ) 
    ); 
    websocket.setAsyncSupported(true); 
    websocket.addMapping("/websocket/*"); 

그리고 웹 소켓 서블릿 :

public class MyWebSocketServlet extends WebSocketServlet{ 

    @Override 
    public void configure(WebSocketServletFactory factory) { 
    factory.register(MyWebSocketEndpoint.class); 
    } 
} 

그리고 마지막은

는 기본적으로 사용자가 웹 소켓 세션을 협상 DW에 웹 소켓 - 서블릿을 추가 http://www.eclipse.org/jetty/documentation/9.0.6.v20130930/websockets.html

https://groups.google.com/d/msg/dropwizard-user/doNCx_35urk/5PIvd8_NHIcJ를 참조하십시오 부두 websocket libs에 의해 instanciated 귀하의 종점 :

@WebSocket 
public class MyWebSocketEndpoint { 

    @OnWebSocketMessage 
    public void onMessage(Session session, String s) throws IOException { 
     session.getRemote().sendString("Returned; "+s); 
    } 

} 
+0

작동 예이다 https://github.com/stakkTraze/dropwizard-atmosphere – chriswynnyk

+0

I이 원인 위 링크에 댓글 바와 Atmo 서블릿이 DW에서 사용되는 저지에서 설정을 스캔 할 때 두 개의 저어지 환경이 있습니다. (https://groups.google.com/d/msg/dropwizard-user/doNCx_35urk/s85wj0KMm2YJ) – polve

0

당신은 당신이이 두 Dropwizard 번들 중 하나를 사용할 수있는 JSR-356 WebSocket을 표준 따르십시오 :

  • dropwizard-websocket-jee7-bundle
  • dropwizard-websockets bundle 내가에서 두 번째를 썼다을 websockets 메트릭 (카운트 메시지, 열린 세션, 세션 지속 시간 통계 등 ...)도 지원합니다.

    예 : 다음

    <dependency> 
        <groupId>com.liveperson</groupId> 
        <artifactId>dropwizard-websocket</artifactId> 
        <version>XXX</version> 
    </dependency> 
    

    :

    public void initialize(Bootstrap<Configuration> bootstrap) { 
        bootstrap.addBundle(new WebsocketBundle(AnnotatedEchoServer.class)); 
    } 
    
    @Metered 
    @Timed 
    @ExceptionMetered 
    @ServerEndpoint("/annotated-ws") 
    public static class AnnotatedEchoServer { 
        @OnOpen 
        public void myOnOpen(final Session session) throws IOException { 
         session.getAsyncRemote().sendText("welcome"); 
        } 
    
        @OnMessage 
        public void myOnMsg(final Session session, String message) { 
         session.getAsyncRemote().sendText(message.toUpperCase()); 
        } 
    
        @OnClose 
        public void myOnClose(final Session session, CloseReason cr) { 
        } 
    } 
    
    여기