Linux终端与服务器通信

标签 linux sockets terminal websocket netcat

我有一个在终端中运行的脚本,它每 2 秒从 PHP 脚本轮询一次服务器以获取 0 或 1,然后根据结果执行命令。

不重要的提示:它在树莓派上运行。

所以我的问题是:是否有更好的方式与服务器通信? 理想的是像 socket.io 或 html5 websocket 类型的连接,但这些连接在终端上是不可行的。

这是我所拥有的,以便您了解要点

while :
 do

gpio mode 0 out
gpio mode 7 out

var1=$(curl http://url.com/index.php)
L1=$(echo $var1 | cut -c1-1)
L7=$(echo $var1 | cut -c7-7)
if [ $L1 == 0 ]; then
gpio write 0 0
elif [ $L1 == 1 ]; then
gpio write 0 1
fi

if [ $L7 == 0 ]; then
gpio write 7 0
elif [ $L7 == 1 ]; then
gpio write 7 1
fi

gpio readall
sleep 2

done

编辑:我需要在同一台服务器上运行大约 1000 个树莓派单元,我只是在寻找最有效的方法。

最佳答案

有很多方法可以做到这一点。 HTTP 不是最适合这个的协议(protocol)(因为它不支持 session ),但是因为你已经在使用它了。让我们看看 HTTP 的解决方案。

您可以将数据从服务器推送到客户端,而不是轮询(这很昂贵但实现起来很简单)。

要使用 HTTP 执行此操作,请使用 COMET,它是执行此操作的几种不同技术的总称。参见 http://en.wikipedia.org/wiki/Comet_%28programming%29

用 nginx 做这个你需要一个额外的模块,例如: https://github.com/wandenberg/nginx-push-stream-module

关于Linux终端与服务器通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18905205/

相关文章:

c - C 中的套接字 : Proper way to close socket

linux - 为什么 sort -u 给出与 sort filename | 不同的输出? uniq-你?

linux -/proc/cpuinfo 地址大小信息与内存页面大小有何关系?

java - 如何通过套接字连接将 float 从java发送到C++?

angularjs - 模拟Angularjs套接字并在 Jasmine 中测试

正则表达式使用 grep 匹配尽可能少的次数(惰性)

windows - 有没有办法让现有的cmd窗口执行命令?

shell - shell 行为中指定大小的 For 循环

c++ - 用 C++ 编写可动态加载的组件

linux - 无法在 Shell 脚本中保存进程的进程 ID