netty 的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wuwudeqi
V2EX    Java

netty 的问题

  •  
  •   wuwudeqi 2019-12-20 16:14:27 +08:00 4305 次点击
    这是一个创建于 2126 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在我是用 netty 服务端来和硬件做通讯,用 spring boot 框架,硬件每次连接上线,我通过 HashMap<String, Channel> channelHashMap,将 ip 与对应的 channel 存储,当我需要主动发起请求,就根据 ip 去 map 中拿 channel,然后发送数据,因为会有很多设备连接会上报消息,那么我该怎么判断在 RequestDecoder 收到的消息是我刚刚发出的消息

    7 条回复    2019-12-22 18:04:12 +08:00
    xzg
        1
    xzg  
       2019-12-20 16:53:27 +08:00
    不存在你想的那个问题,设备上报的数据是通过 decoder 是 ChannelInbound 的 handler,你下发的数据 write 是通过 ChannelHandlerContext 写入 ChannelOutbound。下面是官方的图

    I/O Request
    via Channel or
    ChannelHandlerContext
    |
    +---------------------------------------------------+---------------+
    | ChannelPipeline | |
    | \|/ |
    | +---------------------+ +-----------+----------+ |
    | | Inbound Handler N | | Outbound Handler 1 | |
    | +----------+----------+ +-----------+----------+ |
    | /|\ | |
    | | \|/ |
    | +----------+----------+ +-----------+----------+ |
    | | Inbound Handler N-1 | | Outbound Handler 2 | |
    | +----------+----------+ +-----------+----------+ |
    | /|\ . |
    | . . |
    | ChannelHandlerContext.fireIN_EVT() ChannelHandlerContext.OUT_EVT()|
    | [ method call] [method call] |
    | . . |
    | . \|/ |
    | +----------+----------+ +-----------+----------+ |
    | | Inbound Handler 2 | | Outbound Handler M-1 | |
    | +----------+----------+ +-----------+----------+ |
    | /|\ | |
    | | \|/ |
    | +----------+----------+ +-----------+----------+ |
    | | Inbound Handler 1 | | Outbound Handler M | |
    | +----------+----------+ +-----------+----------+ |
    | /|\ | |
    +---------------+-----------------------------------+---------------+
    | \|/
    +---------------+-----------------------------------+---------------+
    | | | |
    | [ Socket.read() ] [ Socket.write() ] |
    | |
    | Netty Internal I/O Threads (Transport Implementation) |
    +-------------------------------------------------------------------+
    xzg
        2
    xzg  
       2019-12-20 16:54:29 +08:00
    算了 这个排版贼鸡儿恶心
    wysnylc
        3
    wysnylc  
       2019-12-20 17:52:08 +08:00
    把 HashMap 换成 ConCurrentHashMap 或者 ConCurrentSkipListMap
    JYDXL
        4
    JYDXL  
       2019-12-20 19:52:31 +08:00
    没太看懂要表达的意思,如果说的是请求-响应模式,tcp 这种全双工的原本就不是一一对应的,一般是在协议里放一个请求序号字段,对应的返回用同一个序号来区分。
    Jimmy2Angel
        5
    Jimmy2Angel  
       2019-12-20 20:04:51 +08:00
    先把问题搞清楚,什么叫“该怎么判断在 RequestDecoder 收到的消息是我刚刚发出的消息”。简单来说,你 write 的数据会经过 encoder 编码后下发给设备,设备上传的数据先经过 decoder 解码成你要的格式数据,然后信息均是从设备上传的数据报文中解析出来的,包括设备 ID (哪个设备的数据)、消息 ID (什么数据)等
    MoHen9
        6
    MoHen9  
       2019-12-20 21:07:15 +08:00 via Android
    一般 TCP 连接建立后会在自己的线程读写消息,所以你直接将连接的设备信息放在 handler 中即可,只要 handler 不共享,就是每个 TCP 对应一个 handler
    ZiLong
        7
    ZiLong  
       2019-12-22 18:04:12 +08:00
    给消息一个标志符如 Id?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5219 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 01:13 PVG 09:13 LAX 18:13 JFK 21:13
    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