物联网设备 TCP 代理转发系统求助

2023-07-11 16:59:19 +08:00
 unscientific404

各位大佬好,求助一个问题:

我司有一套基于 TCP 协议开发的物联网系统,正常情况设备是和我们机房的后端服务器建立长连接,但是我们有很多属地化平台(后端服务部署在客户机房),这样就需要对设备修改远端服务 IP 。

同时由于配置的是定向物联网卡,IP 白名单经常搞错导致设备无法联网,因此领导希望开发一个TCP 代理中转系统,所有的设备都接入该服务,再由该服务解析报文里的设备号,决定转发到那个平台(上行和下行数据都需要对应转发)。

想请教大家有合适的开源方案吗,或者类似的检索关键词,不想重复造轮子(技术栈是 JAVA )谢谢^_^。


当前情况:

设备 1 <-> 主平台

设备 2 <--> 主平台

设备 3 <--> 主平台

设备 4 <--> 属地化平台 A

设备 5 <--> 属地化平台 B

期望的效果:

设备 1 <--> TCP 代理 <--> 主平台

设备 2 <--> TCP 代理 <--> 主平台

设备 3 <--> TCP 代理 <--> 主平台

设备 4 <--> TCP 代理 <--> 属地化平台 A

设备 5 <--> TCP 代理 <--> 属地化平台 B

2510 次点击
所在节点    程序员
43 条回复
anonymous002
2023-07-11 17:01:05 +08:00
你这不就类似于反向代理么,可以看看反向代理 frp 之类的源码,很简单
hankai17
2023-07-11 17:07:12 +08:00
nginx 的 stream 模块?
Dogtler
2023-07-11 17:12:35 +08:00
op 这种方案确实可以具备,操作好了基本上能为公司省下很多资金。
但是有个问题就是,如果是国外的属地化服务后端,高峰时间段下的 tcp 物联网涉及到大量数据上报数据包 会不会造成丢失丢包情况呢?
FreeWong
2023-07-11 17:12:36 +08:00
反向代理无法识别自定义协议中的设备号等内容,无法根据设备号重定向 我的经验是得自己开发
wizzer
2023-07-11 17:14:09 +08:00
MQTT
FreeWong
2023-07-11 17:14:15 +08:00
另外移动有非定向卡,可以向任意 IP 地址通讯,这里就没有白名单的问题了,当然如果你们的通讯模块只能使用电信的那就没有办法
xuxuxu123
2023-07-11 17:20:16 +08:00
把问题进行拆分:
1 、设备因运营商白名单问题经常导致无法联网
2 、动态修改设备上报服务端 IP

第一个问题,行业内有不错的解决方案,并且可以解决同一个运营商白名单数量有限但是客户的服务器超额导致白名单不够的情况
第二个问题,设备生成方案商 sdk 提供功能,设备上报信息之后获取最新的 ip 即可

第一个方案不能说太多,毕竟同行业
Georgedoe
2023-07-11 17:24:00 +08:00
ekuiper
lasuar
2023-07-11 17:24:16 +08:00
要解析报文中的设备号,自己开发一个 TCP 服务不就行了,选一个 java 的 tcp 框架来写就行。
cpstar
2023-07-11 17:26:31 +08:00
看起来就是要保证服务器端稳定而已,那就搞一个前端代理屏蔽主平台、属地平台 A/B 的变化,nginx-upstream 就解决了。

如果解析报文设备号,可以配合 nginx 的 lua 脚本,但是不如简单一点,三个平台三个端口号,在设备上配置好访问哪个端口。
unscientific404
2023-07-11 17:27:57 +08:00
@xuxuxu123 谢谢大佬指点。设备的协议是交通部部标协议,是通用协议,需要兼容存量设备,所以无法自定义。另外定向物联网卡的问题这个必须得走,因为我就是运营商的人...
yazinnnn
2023-07-11 17:32:27 +08:00
设备是你们开发的么?
unscientific404
2023-07-11 17:35:07 +08:00
@hankai17 我去了解一下,它可以通过嵌入脚本解析报文获取到设备号,再查询转发地址做转发吗
unscientific404
2023-07-11 17:35:38 +08:00
@Dogtler 我们这个服务只会在国内部署
unscientific404
2023-07-11 17:36:39 +08:00
@FreeWong 我们用的也是移动的物联网卡,不过是定向的必须走 IP 白名单
xuxuxu123
2023-07-11 17:37:13 +08:00
@unscientific404
那么这样的话,其实就是一个反向代理的功能,只不过,这个代理程序需要自己手敲硬编码去查库;
编码难度不大,只是需要考虑高并发、带宽以及网络 IO
unscientific404
2023-07-11 17:38:06 +08:00
@Georgedoe 我研究一下
unscientific404
2023-07-11 17:38:53 +08:00
@yazinnnn 设备是行业标准设备,协议是定死的,不能动
u20237
2023-07-11 17:40:11 +08:00
use udp.
unscientific404
2023-07-11 17:44:24 +08:00
@cpstar 属地化平台很多,未来还会增加。而且设备是市场上的存量标准设备,不能配置

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

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

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

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

© 2021 V2EX