V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
h4lbhg1G
V2EX  ›  问与答

tcp 数据转发

  •  
  •   h4lbhg1G · 2018-06-01 20:27:26 +08:00 · 1912 次点击
    这是一个创建于 2400 天前的主题,其中的信息可能已经有所发展或是发生改变。
    现在遇到一个需求,需要侦听几十个 tcp 端口,用于接收 tcp 数据,这每个端口都只允许一个发布者;然后也要侦听几十个 tcp 端口用于转发从上面接收端口收到的数据,一个端口允许有多个接受者。接收端口与发布端口之间有对应关系。有点类似主播、直播间的样子。

    请问下大佬们有什么推荐的方案么?目前有一个效率比较低的,就是运行几十次一个转发程序,但是 CPU 很快被占满。

    数据量不大,速率受串口传输速率限制。
    7 条回复    2018-06-02 10:12:57 +08:00
    LGA1150
        1
    LGA1150  
       2018-06-01 20:29:58 +08:00 via Android
    iptables DNAT SNAT
    h4lbhg1G
        2
    h4lbhg1G  
    OP
       2018-06-01 20:32:42 +08:00
    @LGA1150 #1 如果可能还希望顺便拆包一下这个转发的数据,以及一定功能的统计(多少发布者在线,分别多少接受者)。
    ThirdFlame
        3
    ThirdFlame  
       2018-06-01 21:02:40 +08:00   ❤️ 1
    socat??
    ThirdFlame
        4
    ThirdFlame  
       2018-06-01 21:03:01 +08:00
    还要拆包统计的话,那估计只能自己写了。
    Philippa
        5
    Philippa  
       2018-06-01 21:49:55 +08:00 via Android   ❤️ 1
    规则自己写一份简单的协议就可以了, 用协程 + protobuf 写一个。CPU 不够这简单, 加机器, Go 挺适合的。代码量也很少, 部署等都很方便直接, 性能很好。通讯层写好了外面加层你自己喜欢的语言写的业余处理就行了。
    FreeEx
        6
    FreeEx  
       2018-06-01 22:21:55 +08:00 via Android   ❤️ 1
    @LGA1150 这不就是 netns 嘛
    ryd994
        7
    ryd994  
       2018-06-02 10:12:57 +08:00 via Android
    rinetd
    要更多功能的话自己写
    用 select 写一个,一两百行最多了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5367 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 07:02 · PVG 15:02 · LAX 23:02 · JFK 02:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.