2016-06-19 2 views
2

클라이언트에서 SSE especification을 사용하는 netty 기반 서버를 만들려고 시도합니다. 먼저 SimpleChannelInboundHandler에서 확장되고 onNotificationRecibed에 알림이 도착하면 내 Pub 시스템에서 확장되는 처리기 (NotifyHandler)를 만듭니다. 컨텍스트 출력 채널에 기록됩니다. 이니셜에 Netty 4 SSE 업데이트 이벤트

private ChannelHandlerContext context = null; 
private Publisher p = null; 

@Override 
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { 
    super.channelRead(ctx, msg); 
    this.context = ctx; 
    HttpResponse response = new DefaultHttpResponse(HttpVersion.HTTP_1_1, 
      HttpResponseStatus.OK); 
    HttpHeaders headers = response.headers(); 
    headers.set(HttpHeaders.Names.CONTENT_TYPE, "text/event-stream"); 
    headers.set(HttpHeaders.Names.CACHE_CONTROL, "no-cache, no-store, max-age=0, must-revalidate"); 
    headers.set(HttpHeaders.Names.PRAGMA, HttpHeaders.Values.NO_CACHE); 
    headers.set(HttpHeaders.Names.TRANSFER_ENCODING, HttpHeaders.Values.CHUNKED); 
    ctx.writeAndFlush(response); 
    Pub.getInstance().suscribe(this); 
} 

@Override 
public void onNotificationRecibed(String type, Map<String, Object> data) { 
    context.writeAndFlush("event:"+type); 
    context.writeAndFlush("data:"+data.toString()); 
    context.flush(); 
} 

:

public void initChannel(SocketChannel ch) { 
    ChannelPipeline pipeline = ch.pipeline(); 
    pipeline.addLast(new HttpRequestDecoder()); 
    pipeline.addLast(new HttpResponseEncoder()); 
    pipeline.addLast(new NotifyHandler()); 
} 

나는 내가 아무것도 작동하는 것 같다 없지만,이 스트림에 몇 가지 예 또는 용도를 찾기 위해 노력하고, 작동하게 할수 없어. 누구든지 올바른 방향으로 나를 가리킬 수 있습니까?. 내 영어로 죄송합니다. 시간 내 주셔서 감사합니다.

+0

작동하지 않는 항목에 대해 자세히 설명해 줄 수 있습니까? 또한 ChannelFutureListener를 writeAndFlush()가 반환 한 ChannelFuture에 추가하고 미래가 실패했는지 확인해야합니다. –

+0

Norman, 문제는 클라이언트 측에서 데이터를받지 못한다는 것입니다. 아쉽게도 ChannelFutureListener를 시도하고 결과를 알려주십시오. – tbp

답변

0

나는 동일한 문제가있었습니다. specification에 설명되어 있듯이 각 필드는 줄 바꾸기와 각 줄마다 다른 줄 바꿈으로 구분되어야합니다.

@Override 
public void onNotificationRecibed(String type, Map<String, Object> data) { 
    context.writeAndFlush("event:" + type + "\n"); 
    context.writeAndFlush("data:" + data.toString() + "\n\n"); 
    context.flush(); 
}