如何解决使用一个服务器/多个客户端IoT板优化通过LAN的GPIO和其他数据传输
对不起,我的英语,我是新来的,我试图解释我的问题。
硬件设置:
- D-link DGS1024开关
- Pine64 A64 512MB板(只有10 Mbit eth)24个。
- Raspberry Pi 3 Model B 1个。
在所有Pine64板上,GPIO用于:4个红外接收器,2个红外发射器,8个输出,8个输入,模拟音频输出用于音效。
代码的作用:例如,如果4号客户得到输入,则将其发送到服务器。服务器在启动时将文件加载到RAM,并存储了逻辑:描述何时从x客户端激活输入,需要从任何或所有客户端(取决于逻辑文件配置)设置或重置该输出。
我做了什么:
-
Pine64卡(“客户端”)具有作为linux服务启动的已编译c ++代码:是一种多线程代码,一部分可以检测GPIO输入,控制GPIO输出,使用以下命令检查和发送ir信号:内核驱动程序,可以播放/停止15个独立的音频(第十六个命令是一个音频停止命令)(我将仅使用短sfx音频,不需要暂停/继续功能)。第二部分尝试连接并解析服务器IP(或在回退/错误时尝试使用固定IP)。
-
在Raspberry PI上作为“服务器” ,有一个Apache Web服务器作为GUI,在那里我可以上载或下载“逻辑文件”或启动/停止已编译的c ++代码, “服务器”。如果服务器可执行文件正在运行,则GUI能够编辑/保存“逻辑文件”,或者如果客户端已连接,则它可以:检查基本信息(ID,IP,cli exec版本,通过SSH远程更新cli exec),调试(开始/停止sfx,检查并设置I / O),通过SSH上传/删除/检查音频文件。
过去,我使用Pine64型PC作为“服务器”,而不使用多线程:在循环中读取所有客户端消息,计算答案并发回控制消息。当我连接3-4个客户端时,这种方法太慢了。
现在,我将服务器升级到PI3,并开始在单独的线程中为客户端提供服务。我现在使用的是TCP keepalive类型的套接字:在一个周期内接收到10个字节,再将10个字节发送给单个客户端,并且始终重复执行直到连接中断为止。
问题:如果我仅根据需要(在输入状态更改时)将消息发送到服务器,并保持某种随时可以向客户端发送控制消息的功能,是否可以进一步加快通信速度?一经请求?也许使用广播地址?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。