![](/img/trans.png)
[英]add headers to a response fired by ChannelHandlerContext (Netty)
[英]identify user across ChannelHandlerContext in netty websockets
我無法弄清楚如何識別用戶,因為在LoggingHandler和SimpleChannelInboundHandler中,ChannelHandlerContext是不同的:
class WebSocketServerInitializer extends ChannelInitializer<SocketChannel> {
@Override
public void initChannel(SocketChannel ch) throws Exception {
ChannelPipeline pipeline = ch.pipeline();
pipeline.addLast(new HttpServerCodec());
pipeline.addLast(new HttpObjectAggregator(65536));
pipeline.addLast(new WebSocketServerProtocolHandler(WEBSOCKET_PATH, null, true));
pipeline.addLast(new WebSocketIndexPageHandler(WEBSOCKET_PATH));
pipeline.addLast(new WebSocketFrameHandler());
pipeline.addLast(new SessionManagerAxx());
}
}
LoggingHandler:
class SessionManagerAxx extends LoggingHandler {
@Override
public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
if (evt.equals(ServerHandshakeStateEvent.HANDSHAKE_COMPLETE)) {
///add the user
Clients.getInstance().addNewClient(ctx);
}
super.userEventTriggered(ctx, evt);
}
}
FrameHandler:
class WebSocketFrameHandler extends SimpleChannelInboundHandler<WebSocketFrame> {
private static final Logger logger = LoggerFactory.getLogger(WebSocketFrameHandler.class);
@Override
protected void channelRead0(ChannelHandlerContext ctx, WebSocketFrame frame) throws Exception {
Clients.getInstance().getClient(ctx);
//Handle user msg
}
}
您可以在Channel.attr(...)
添加一些內容,然后在兩個處理程序中使用。
身份驗證在ChannelHandler javadoc的 “狀態管理”部分中描述
似乎管道中的節點不共享ChannelHandlerContext,所以我解決了在單個類中加入FrameHandler和SessionManager的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.