tbp*_*tbp 5 java netty server-sent-events
我试图创建一个基于 netty 的服务器以在客户端上使用SSE 规范\n首先,我创建一个处理程序(NotifyHandler),该处理程序从 SimpleChannelInboundHandler 扩展,并从我自己的 Pub 系统扩展,当通知到达 onNotificationRecibed 时,它会写入上下文输出通道。
\n\nprivate 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}\nRun Code Online (Sandbox Code Playgroud)\n\n在初始化器上:
\n\npublic 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}\nRun Code Online (Sandbox Code Playgroud)\n\n我可以\xc2\xb4t 使它工作,我试图在这个流上找到一些示例或用法,但似乎没有任何效果。任何人都可以指出我正确的方向吗?抱歉我的英语不好,谢谢你的时间。
\n我有同样的问题。正如规范中所描述的,每个字段必须用换行符分隔,每条消息必须用另一个换行符分隔。
@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)
| 归档时间: |
|
| 查看次数: |
1510 次 |
| 最近记录: |