让我们说我们有某种发布/子协议。当有人连接和订阅时,我们可以在Map,List或ChannelGroup中保存频道:
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
super.channelActive(ctx);
log.debug("Client connected: {}", ctx.channel().remoteAddress());
clients.add(ctx);
}
之后,当某些消息发生或某些事件发生时,我可以通知客户:
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) {
log.debug("Client {} published msg: {}", ctx.channel().remoteAddress(), msg);
clients.foreach(client -> client.getChannel().writeAndFlush(msg));
}
因此,让我们想象一下某些客户在同一时刻发布消息(例如" msg1"," abc2")的情况。它会导致并发问题吗?例如,我可以在某些情况下检索" msabg1c2"而不是" msg1abc2"?或者Netty处理此类案件?
答案 0 :(得分:1)
频道是线程安全的,所以只要呼叫顺序正确,就不会有任何问题