tcp 数据转发

2018-06-01 20:27:26 +08:00
 h4lbhg1G
现在遇到一个需求,需要侦听几十个 tcp 端口,用于接收 tcp 数据,这每个端口都只允许一个发布者;然后也要侦听几十个 tcp 端口用于转发从上面接收端口收到的数据,一个端口允许有多个接受者。接收端口与发布端口之间有对应关系。有点类似主播、直播间的样子。

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

数据量不大,速率受串口传输速率限制。
1911 次点击
所在节点    问与答
7 条回复
LGA1150
2018-06-01 20:29:58 +08:00
iptables DNAT SNAT
h4lbhg1G
2018-06-01 20:32:42 +08:00
@LGA1150 #1 如果可能还希望顺便拆包一下这个转发的数据,以及一定功能的统计(多少发布者在线,分别多少接受者)。
ThirdFlame
2018-06-01 21:02:40 +08:00
socat??
ThirdFlame
2018-06-01 21:03:01 +08:00
还要拆包统计的话,那估计只能自己写了。
Philippa
2018-06-01 21:49:55 +08:00
规则自己写一份简单的协议就可以了, 用协程 + protobuf 写一个。CPU 不够这简单, 加机器, Go 挺适合的。代码量也很少, 部署等都很方便直接, 性能很好。通讯层写好了外面加层你自己喜欢的语言写的业余处理就行了。
FreeEx
2018-06-01 22:21:55 +08:00
@LGA1150 这不就是 netns 嘛
ryd994
2018-06-02 10:12:57 +08:00
rinetd
要更多功能的话自己写
用 select 写一个,一两百行最多了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/459682

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX