
netty 中每个 channel 对应一个 pipeline,pipeline 上面注册有多个 handler (也就是 channelhandlercontext ),handler 之间传递数据的方式就是实现了 inbound 或者 outbound 接口后直接 write。
现在的问题是:netty 中如何创建同一个 evenloop 中多个 channel 能够共享的变量?? 我看到一个 demo 里面是在 handler 中将该变量声明成 volatile,但是我感觉可能不太对,在网上搜资料也没找到什么可行的方案。
难道真的要写到 redis 里面去吗?
1 cyhulk Apr 25, 2019 放到 redis 里面和直接写一个静态类,然后里面放数据有什么区别? |
4 mortonnex Apr 25, 2019 把要共享的数据写到一个的类中,所有 channel 都可以访问 |
5 gramyang OP @mortonnex 我是把共享的 concurrenthashmap 放在初始化 ServerBootstrap 的类中,这样理论上所有的 channel 都可以访问到。 |
6 gramyang OP @cyhulk 嗯,是的,只有这种方法了。我本来想着继承一下 eventloopgroup,往里面塞个 map 什么的,现在看来没必要,而且也不知道可不可行 |
8 guyeu Apr 25, 2019 ThreadLocal ? |
10 mazai Dec 2, 2019 实际上 Channel 已经帮你维护了一个 AttributeMap,里面可以放一些业务的数据,且是线程安全的,无须担心并发问题。 |
11 mazai Dec 2, 2019 |