UDP 协议,怎么从外网推送消息到内网设备?

2019-05-23 14:47:48 +08:00
 a54552239

PHP,云端用 workerman 做 udp 服务器。硬件设备是单片机。现在的情况是,云端服务器可以接收从内网设备发出的数据,获取动态的 IP 和端口。但是不能根据这个获取到的 IP (公网)和端口号发送数据给设备,只能用内网 IP 和端口发送。用小米路由器的端口映射可以解决,不过不灵活。因为端口号是不固定的。希望有一个好的解决方案

5251 次点击
所在节点    程序员
39 条回复
unixeno
2019-05-23 14:55:30 +08:00
可以发啊,你需要维护一个心跳包定时发,不然 nat 就老化了
TomVista
2019-05-23 15:16:39 +08:00
不应该啊,云端按照 socket 就能发回来,你这个是不是代码出问题了
opengps
2019-05-23 15:18:17 +08:00
能去就能回的
a54552239
2019-05-23 15:20:05 +08:00
我是指不定再某个时候主动推送消息的。不是在当前连接,当前连接的话是可以发的。
a54552239
2019-05-23 15:20:15 +08:00
a54552239
2019-05-23 15:21:08 +08:00
设备大概是每 30 秒会向服务器推送数据
TomVista
2019-05-23 15:22:10 +08:00
心跳包保活,
whatsmyip
2019-05-23 15:22:11 +08:00
需要心跳保活,之前做 app 推送遇到过,超过 10s 链接就被关掉了,但是感知不到。
a54552239
2019-05-23 15:24:03 +08:00
是在服务器端做心跳包吗?
@TomVista
@whatsmyip
TomVista
2019-05-23 15:26:28 +08:00
客户端,要不然链接死了,服务器就丢了客户端,或者客户端 ip 动态改变了,服务器就找不到了,
a54552239
2019-05-23 15:28:41 +08:00
现在有做心跳的,间隔 17 秒
a54552239
2019-05-23 15:28:49 +08:00
TomVista
2019-05-23 15:31:40 +08:00
服务器接收心跳包,然后更新客户端 socket,需要主动推送,就把存的 socket 拿出来,进行推送.

是这个套路不.
a54552239
2019-05-23 15:32:53 +08:00
@TomVista 目前是这个套路
TomVista
2019-05-23 15:34:21 +08:00
那怎么会接不到,,
opengps
2019-05-23 15:35:49 +08:00
给你参考下,我做的 GPS 定位器,是等待设备过来时候再下发指令,要么就通过短信这种方式下达指令
TomVista
2019-05-23 15:36:31 +08:00
"但是不能根据这个获取到的 IP (公网)和端口号发送数据给设备,"

存的是 socket 对象 不是 socket 里面的 ip,对吧?
a54552239
2019-05-23 15:40:30 +08:00
@TomVista 是同一个 ip。不过我是希望某个时候,由服务器端根据这个 ip 和端口再主动和设备监理一个连接。。不懂可行不
a54552239
2019-05-23 15:41:03 +08:00
@opengps 实时位置做持久化处理吗?
billzhuang
2019-05-23 15:52:10 +08:00

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

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

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

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

© 2021 V2EX