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());
}
나는 내가 아무것도 작동하는 것 같다 없지만,이 스트림에 몇 가지 예 또는 용도를 찾기 위해 노력하고, 작동하게 할수 없어. 누구든지 올바른 방향으로 나를 가리킬 수 있습니까?. 내 영어로 죄송합니다. 시간 내 주셔서 감사합니다.
작동하지 않는 항목에 대해 자세히 설명해 줄 수 있습니까? 또한 ChannelFutureListener를 writeAndFlush()가 반환 한 ChannelFuture에 추가하고 미래가 실패했는지 확인해야합니다. –
Norman, 문제는 클라이언트 측에서 데이터를받지 못한다는 것입니다. 아쉽게도 ChannelFutureListener를 시도하고 결과를 알려주십시오. – tbp