我正在尝试使用PHP将数据发送到客户端来解决我的问题。最大的问题是 - 我要做的是继续使用PHP脚本在单个连接中发送数据。我确定还有其他方法,但目前我不知道如何解决这个问题。
我要做的是:客户端连接到Web服务器并保持连接打开,因此TCP连接已“建立”。他将每隔X秒继续进行一次GET请求,以保持此连接的活跃。
在某些事件的此连接内部,我想在没有他发出请求的情况下向客户端发送一些数据!所以这意味着事件是在服务器端触发的,而不是在客户端触发的。
由于我的客户端是Arduino模块,因此不可能使用任何JavaScript或任何客户端技术。我可以保持连接打开,但我需要使用HTTP将数据传递给客户端。
我在服务器上设置了数据库,当数据库内部发生变化时,PHP会将数据发送到客户端。
我试图在PHP脚本中使用循环运行的php flush();但这并不是我想要的方式。
所以任何建议都表示赞赏。 谢谢。
编辑:将是完美的解决方案也适用于Windows机器!
edit2:将有多个客户端,而不仅仅是一个(例如数百个)
答案 0 :(得分:1)
只要您没有很多客户端,服务器端事件听起来就像它可以为您工作。 http://dsheiko.com/weblog/html5-and-server-sent-events
请注意,您将拥有数百个客户端,在这种情况下,您可能不希望使用PHP,而是使用node.js。
答案 1 :(得分:0)
CRON工作怎么样?
http://en.wikipedia.org/wiki/Cron
http://www.cyberciti.biz/faq/how-do-i-add-jobs-to-cron-under-linux-or-unix-oses/
我认为这可能是您项目的解决方案。如果我不正常并且CRON正确,那么你所做的就是以给定的间隔执行给定的脚本。所以这基本上是你想要的,脚本每X秒执行一次。在你的脚本中,你的功能是使用数据库。
答案 2 :(得分:0)
我认为您正在寻找的是IPC - 进程间通信。在你的情况下,我会建议一个消息队列(或其中的多个)
(在客户端)
foo.php
(在服务器上 - foo.php
)
bar.php
了解它。(在服务器上 - bar.php
)
这种方法存在一些问题:
好处:
bar.php
可以说是一个Java应用程序。答案 3 :(得分:0)
好的,所以我想我找到了我希望它的工作方式。 flush()无法正常工作的问题是我在刷新之前没有达到刷新缓冲区限制。此外,我正在使用Nginx服务器,我禁用了gzip(以防万一)。
我的测试代码绝对有效:
<?
ob_implicit_flush(1);
for($i=0; $i<10; $i++){
echo $i;
//this is for the buffer achieve the minimum size in order to flush data
echo str_repeat(' ',1024*64);
sleep(1);
}
?>
在这里找到我的答案:PHP Flush that works... even in Nginx
我会用我的Arduinos测试它是否可以接受这样的输出。谢谢大家的帮助。