【问题标题】:Is there a way to provide simultaneous access to a webserver script?有没有办法同时访问网络服务器脚本?
【发布时间】: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 会更好。

标签: php json database


【解决方案1】:

您当前没有从客户端到服务器的持久连接(例如 WebSockets),这是您问题的症结所在:当客户端 1 更改按钮时,服务器无法告诉客户端 2 更改。您可以让客户端定期轮询服务器并检查状态更改,但这可能无法很好地扩展或支持低延迟。

这个问题是非常开放的,但您可能会从一些维护客户端连接和状态的持久进程中受益。

【讨论】:

    【解决方案2】:

    如果您的应用程序客户端和服务器打算在局域网中运行,或者它们的 IP 地址可以是公共的(而不是在 nat 之后),您可以让它们使用简单的套接字定期告诉服务器它们在哪里(ip)以及它们何时拥有服务器将通过套接字通知他们的消息 连接,此时只有他们像往常一样使用 HTTP 请求从服务器检索消息 它甚至更好,而不是定期告诉服务器新的 IP 地址只有在它改变时 如果您正在学习和实验,并且对于生产或严肃的学校项目使用 websocket,请执行上述操作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-18
      • 1970-01-01
      • 2014-05-23
      • 1970-01-01
      • 2017-04-16
      相关资源
      最近更新 更多