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

Netty 如何处理多个自定义协议?

  •  
  •   Uyuhz · 2019-10-31 15:10:29 +08:00 · 3941 次点击
    这是一个创建于 1841 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我们的服务器目前只支持一种,协议由 GPS 设备厂商提供,但是由于对方这块业务不做了,所以准备对接其他厂家(协议大概率是对方提供而非我们制定)。

    搜索了下,大概有 2 种:
    1.一个端口处理多个协议,在 decoder 里根据协议头不同,分别解析
    2.多个端口处理,创建多个 nettyserver 实例用不同端口隔离不同协议

    所以在不更改原有协议的,并且增加多个自定义协议(后续也许还有)的情况下,怎样更好点?
    有没有做过类似需求的大佬分享下更好的办法

    6 条回复    2019-12-27 14:35:56 +08:00
    xkzhangsan
        1
    xkzhangsan  
       2019-11-03 09:12:03 +08:00
    可以在根据协议类型设置对应协议处理,可以参考 dubbo 多协议的处理。
    Huayx9
        2
    Huayx9  
       2019-12-24 14:33:12 +08:00
    jt808 交流一下?
    Uyuhz
        3
    Uyuhz  
    OP
       2019-12-24 16:47:04 +08:00
    @Huayx9 啥意思...
    tairan2006
        4
    tairan2006  
       2019-12-27 11:15:38 +08:00
    楼主啥思路,我这边做物联网关,协议乱七八糟的,甚至还有 modbus 之类的…如果用同一个端口,能不能正确解析协议也是一个问题。

    本来想用 go 写的,这就比较简单了,可惜 go 语言的生态不行,很多工业协议都没有成熟的类库,额外工作量太大了。
    Uyuhz
        5
    Uyuhz  
    OP
       2019-12-27 13:18:54 +08:00
    @tairan2006 go 我不太了解,我是用的 JAVA 的 Netty。感觉一个端口不太方便,最后还是用不同端口去隔离开来解析的。目前有两个协议,一个是 JT808 改的协议,一个是厂家自定义的协议。

    之前 1L 说的参考 dubbo 多协议处理,我去看了下源码,实在没看懂。
    tairan2006
        6
    tairan2006  
       2019-12-27 14:35:56 +08:00
    @Uyuhz 嗯,我想也是…还是多端口隔离比较简单。go 写起来很简单,各服务之间通信也很简单,问题在于这块的生态不行。Java 这边成熟的库多得多。不过据我观察,最多的还是 c 和.net 的库,工控界更喜欢这些…
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3397 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 04:52 · PVG 12:52 · LAX 20:52 · JFK 23:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.