netty:多个 channel 如何共享数据?? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
gramyang
V2EX    Java

netty:多个 channel 如何共享数据??

  •  
  •   gramyang Apr 25, 2019 3515 views
    This topic created in 2559 days ago, the information mentioned may be changed or developed.

    netty 中每个 channel 对应一个 pipeline,pipeline 上面注册有多个 handler (也就是 channelhandlercontext ),handler 之间传递数据的方式就是实现了 inbound 或者 outbound 接口后直接 write。

    现在的问题是:netty 中如何创建同一个 evenloop 中多个 channel 能够共享的变量?? 我看到一个 demo 里面是在 handler 中将该变量声明成 volatile,但是我感觉可能不太对,在网上搜资料也没找到什么可行的方案。

    难道真的要写到 redis 里面去吗?

    11 replies    2019-12-02 18:54:10 +08:00
    cyhulk
        1
    cyhulk  
       Apr 25, 2019
    放到 redis 里面和直接写一个静态类,然后里面放数据有什么区别?
    gramyang
        2
    gramyang  
    OP
       Apr 25, 2019
    @cyhulk 最好是可以让指定的 channel 来访问,对其他的 channel 屏蔽,这样该怎么实现呢
    cyhulk
        3
    cyhulk  
       Apr 25, 2019
    @gramyang 一个 map 结构存储数据,每个 channel 的 attribute 里面存这个 key。抛砖引玉
    mortonnex
        4
    mortonnex  
       Apr 25, 2019
    把要共享的数据写到一个的类中,所有 channel 都可以访问
    gramyang
        5
    gramyang  
    OP
       Apr 25, 2019
    @mortonnex 我是把共享的 concurrenthashmap 放在初始化 ServerBootstrap 的类中,这样理论上所有的 channel 都可以访问到。
    gramyang
        6
    gramyang  
    OP
       Apr 25, 2019
    @cyhulk 嗯,是的,只有这种方法了。我本来想着继承一下 eventloopgroup,往里面塞个 map 什么的,现在看来没必要,而且也不知道可不可行
    mortonnex
        7
    mortonnex  
       Apr 25, 2019
    @gramyang
    这样就耦合了
    建议单独搞一个类,例如叫 ShareCache.java
    你要共享的数据设为静态成员变量,就可以直接访问了
    guyeu
        8
    guyeu  
       Apr 25, 2019
    ThreadLocal ?
    deming
        9
    deming  
       Apr 26, 2019
    ChannelHandler 可以设成共享模式,增加 @Sharable 注解,但是自己要控制线程安全问题。
    mazai
        10
    mazai  
       Dec 2, 2019
    实际上 Channel 已经帮你维护了一个 AttributeMap,里面可以放一些业务的数据,且是线程安全的,无须担心并发问题。
    mazai
        11
    mazai  
       Dec 2, 2019
    About     Help     Advertise     Blog     API     FAQ     Solana     4392 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 37ms UTC 00:08 PVG 08:08 LAX 17:08 JFK 20:08
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86