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