Netty,并发writeAndFlush

时间:2018-06-18 10:27:24

标签: concurrency netty channel

让我们说我们有某种发布/子协议。当有人连接和订阅时,我们可以在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处理此类案件?

1 个答案:

答案 0 :(得分:1)

频道是线程安全的,所以只要呼叫顺序正确,就不会有任何问题