Netty,并发 writeAndFlush
Posted
技术标签:
【中文标题】Netty,并发 writeAndFlush【英文标题】:Netty, concurrent writeAndFlush 【发布时间】:2018-11-27 04:17:09 【问题描述】:假设我们有某种发布/订阅协议。当有人连接和订阅时,我们可以将频道保存在 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】:通道是线程安全的,所以只要调用顺序正确,你就不应该有任何问题
【讨论】:
以上是关于Netty,并发 writeAndFlush的主要内容,如果未能解决你的问题,请参考以下文章
netty4在channel.writeAndFlush为啥还阻塞延迟