【发布时间】:2017-12-18 21:46:16
【问题描述】:
我在我的树莓派上用 php 设置了一个 apache2 服务器。我脚本中的 php 代码接收 JSON 将其保存在内存中,然后回显它收到的内容。在我的客户端中,当按下按钮时,它会发送上述 JSON,在服务器返回结果后会更改按钮的颜色。我想要做的是让 2 个客户端使用相同的按钮,我从第一个客户端发送 POST 请求并刷新第二个客户端,然后第二个客户端反映第一个客户端发布的更改。
但这不起作用,我可能使用了错误的工具。我可以开始使用数据库,但最终我想实现一些需要大量写入和读取并且不需要存储很长时间的东西。是否有不同的服务器端脚本语言更适合我正在尝试做的事情,或者数据库是我唯一的选择?
编辑:
我使用 http 的原因是因为它是一个不支持 ipv6 套接字或翻译的游戏客户端,所以我最好使用底层的 http 传输。我的服务器上运行了一些代码,它的工作方式与我希望的一样,但我不明白如何发布任何客户端都可以检索的数据。
<?php
$stream = fopen('php://memory','r+');
fwrite($stream, file_get_contents('php://input',true));
fseek($stream,0);
$data = json_decode($stream);
echo stream_get_contents($data);
?>
它是在 Apache 方面分离传入请求的吗?我的部分问题是我不知道服务器端的术语。我想说这是与 php 并发或与线程有关的东西,但需要做更多的研究。
我将研究 socket.io,但基本上我怎样才能将一些数据发布到任何人都可以访问的某个位置?目前唯一可以访问数据的客户是发布数据的客户。
【问题讨论】:
-
Socket.io 在这里不是更好的系统吗?您可以拥有一个将 JSON 数据从一个转发到另一个的前端服务器,这是一个非常常见的用例。
-
有点不清楚你到底想做什么。关于按钮和请求在两台服务器之间发送的东西?您能否以更简单的方式重新解释一下情况,如果您有代码,可能会提供一些代码。
-
HTTP 是一个请求-响应系统,你不能在它的范围内做你想做的事。您需要使用 javascript 实现一些客户端,以使用新信息更新浏览器,并在服务器端实现一些响应轮询更改请求或处理 WebSocket。
-
客户端能否自动刷新(使用stackoverflow.com/questions/8711888/… 中的标头)?如果您需要“事件驱动”类型的东西,下面的其他 cmets 会更好。