Netty 4 SSE 更新事件

tbp*_*tbp 5 java netty server-sent-events

我试图创建一个基于 netty 的服务器以在客户端上使用SSE 规范\n首先,我创建一个处理程序(NotifyHandler),该处理程序从 SimpleChannelInboundHandler 扩展,并从我自己的 Pub 系统扩展,当通知到达 onNotificationRecibed 时,它会写入上下文输出通道。

\n\n
private ChannelHandlerContext context = null;\nprivate Publisher p = null;\n\n@Override\npublic void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {\n    super.channelRead(ctx, msg);\n    this.context = ctx;\n    HttpResponse response = new DefaultHttpResponse(HttpVersion.HTTP_1_1,\n            HttpResponseStatus.OK);\n    HttpHeaders headers = response.headers();\n    headers.set(HttpHeaders.Names.CONTENT_TYPE, "text/event-stream");\n    headers.set(HttpHeaders.Names.CACHE_CONTROL, "no-cache, no-store, max-age=0, must-revalidate");\n    headers.set(HttpHeaders.Names.PRAGMA, HttpHeaders.Values.NO_CACHE);\n    headers.set(HttpHeaders.Names.TRANSFER_ENCODING, HttpHeaders.Values.CHUNKED);\n    ctx.writeAndFlush(response);\n    Pub.getInstance().suscribe(this);\n}\n\n@Override\npublic void onNotificationRecibed(String type, Map<String, Object> data) {\n    context.writeAndFlush("event:"+type);\n    context.writeAndFlush("data:"+data.toString());\n    context.flush();\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

在初始化器上:

\n\n
public void initChannel(SocketChannel ch) {\n    ChannelPipeline pipeline = ch.pipeline();\n    pipeline.addLast(new HttpRequestDecoder());\n    pipeline.addLast(new HttpResponseEncoder());\n    pipeline.addLast(new NotifyHandler());\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我可以\xc2\xb4t 使它工作,我试图在这个流上找到一些示例或用法,但似乎没有任何效果。任何人都可以指出我正确的方向吗?抱歉我的英语不好,谢谢你的时间。

\n

MPa*_*zik 1

我有同样的问题。正如规范中所描述的,每个字段必须用换行符分隔,每条消息必须用另一个换行符分隔。

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