1
BingoXuan 248 天前
如果设备有能力通过 dns 解析域名获得 ip ,那么直接通过 dns 配置就好。
如果没有这样的能力,最好通过物联网网关或者边缘服务器实现。假设无法访问服务器的时候,可以通过边缘服务器缓存数据。 |
2
tangtang369 248 天前
物联网设备老老实实的 dhcp 就行了 设置静态 ip 换了路由器不就是个砖头吗 跑现场拆开接串口帮客户看 IP 吗
|
3
tangtang369 248 天前
@tangtang369 还是我理解错误只需要改 mqtt 协议的连接地址 如果是这个直接用域名就行了
|
4
unt OP |
5
IvanLi127 247 天前
op 大概是想测试的环境中搞一个 TCP 代理,nginx 好像可以,至少 ws 的 mqtt 是肯定 ok 的。反正找个 tcp 反向代理就能实现,https://github.com/topics/tcp-proxy
|
6
joyanhui 247 天前
nginx stream 可以做到,本身就是反向代理。不过后端在获取客户的 ip 的真实 ip 的需要另外处理,一般使用 Proxy Protocol 协议附加一下。
也可以给物联网设备发送一条消息通知客户请求新服务器,我们是用的消息通知客户端的方式。 因为这样省去 nginx 的开支。而且集群的去中心化更容易做。 |
7
cnlnlhb 247 天前
@unt 域名解析几十块钱的模组是有的,之前用过合宙的 2G ,4G 模组和 ESP32 的 wifi 模组,都是可以域名解析的。MQTT 的话,连接地址直接输入域名即可。
如果是模组资源受限,没有 DNS 协议栈,可以加一个兜底逻辑。假设下发 IP 时模组没收到,上一个 IP 又失效了,可以通过兜底服务器 IP (这是个固定不变的)去获取当前最新的服务器 IP ,防止设备失联。 |
8
unt OP 如果 nginx stream 能完美转发的话我觉得比域名解析要来的好。然后你说的兜底服务器 ip 我们这边都是有的。我有空的时候写条附言讲一下我们的开发背景
|
9
retanoj 246 天前
ngx stream 模块是可以实现 4 层代理功能,问题是当你想切换的时候怎么操作呢?
修改 ngx 配置并重启吗? |
10
huang119412 246 天前
别说现在的 4g ,5g 模块,就算 5 年前的老 2g 模块都支持 dns 。不过好像有所谓的安全域名,这个需要向模块提供商确定一下。而且自己写一个 dns-resolve ,代码不超过 200 行。四层负载均衡,如果不超过 10w 的连接,haproxy 就够了,如果连接数太多,建议使用云服务厂商的四层负载均衡。
|