创建网站与嵌入式设备通信
我现在在做一个项目,想通过一个可以上网的网站来控制一个嵌入式设备。我的想法是,用户可以访问这个网站,然后告诉设备执行某个动作。网站上的一个操作会被转化为一系列命令,然后发送给设备。将来可能会实现双向通信,但现在我主要关注的是从服务器到设备的通信。
我的网站服务器是用LAMP技术栈搭建的,使用Python(Django),而我想要通信的设备是一个运行eLinux的Beagle Board。任何时候只会有一个设备与服务器进行通信。
我已经在服务器和设备端写好了所有功能部分,但在编写通信层时遇到了一些麻烦。我的一个大问题是,设备是移动的,每几天就会换个地方。所以,我不能保证设备的IP地址是固定的。我的网络编程知识比较有限,所以我不太清楚从哪里开始。
有没有人能给我一些建议或资源,帮助我开始开发这种通信?
谢谢!
4 个回答
我通常的做法是让设备建立一个反向SSH隧道,这样它就可以“打电话回家”。这个方法特别适合需要穿越网络地址转换(NAT)等情况。你可以在这里了解更多:http://www.howtoforge.com/reverse-ssh-tunneling
不过,SSH连接有时候会断开,所以我会在服务器上设置一个心跳检测的方法。如果客户端(比如Beagle Board)错过了一定数量的心跳信号,就让它关闭当前的隧道并重新建立一个新的。
你可以通过像 DynDNS 这样的服务来注册一个动态主机名。这样,设备就可以在这个网站上更新它的IP地址,这样无论IP地址怎么变,动态主机名总是指向设备的最新IP。对于Linux系统,有很多客户端、脚本等可以做到这一点。
如果服务器是静态的,你可以让设备主动连接到服务器,向它报告自己的IP地址。
你可以为设备写一个简单的UDP服务器,让它监听来自其他设备的消息,然后为你的网页服务器用Python写一个客户端,这样网页服务器就可以进行调用了。