【问题标题】:HTTP - single user on a single connectionHTTP - 单个连接上的单个用户
【发布时间】:2017-05-11 06:18:56
【问题描述】:

我有一个树莓派 pi3 从 instructables.com 运行这个项目 Simple and intuitive web interface for your Raspberry Pi

我需要使按钮起作用,以便一次只有一个用户可以按下按钮,而很多用户可以查看页面。这是为了控制平移/倾斜网络摄像头,其中按钮 0 向左平移摄像机,按钮 1 向右平移摄像机,等等。覆盆子驱动继电器,驱动 Pelco 摄像机平移/倾斜支架中的电机。我不能让一个用户尝试向左平移,而另一个 http 连接上的另一个用户尝试向右平移。无需登录即可访问此树莓。

是否有 Apache2 设置来完成此操作?我认为这不能通过向 GPIO.php 文件中添加代码来解决,或者是否存在?我可以使用信号量或 $global 标志来限制多个并发查看器的按钮驱动吗?

【问题讨论】:

  • 这不是一个可以快速给出答案的简单问题。您需要在 PHP 级别上执行此操作,并且需要仔细规划。

标签: php apache


【解决方案1】:

您需要一个互斥锁。我可能会建议两种快速而肮脏的方法。

锁定系统上的本地文件

打开文件,并锁定它以供写入。

在此期间,如果其他用户尝试控制相机,您将首先尝试打开此文件并将其锁定以进行写入,它会失败并出现错误。

此时你知道你不能给第二个用户控制权。

PHP lock a file for writing

注意:您可以为不同的锁使用多个不同的文件。例如,如果您有多个摄像头,那么您可以使用多个文件来锁定,每个摄像头一个。

使用像 MySQL 这样的数据库

使用 MySQL 之类的数据库,您可以锁定表中的特定行,这与我们在上一个示例中对文件所做的一样有效。

如果第二个用户出现,我们再次尝试锁定同一行并且我们将失败,此时我们可以拒绝第二个用户的请求。

Lock a single row in MySQL

注意:您可以使用多行,其中每一行可能代表一个不同的相机,如上所述。

其他需要考虑的事项

我强烈建议让您的用户能够查看他们是否是当前用户,并实施一种在用户之间公平切换的方法,这样单个用户就无法享受所有乐趣。也许像 15 或 30 秒计时器这样简单的东西可以在当前活动用户之间切换控制。

【讨论】:

  • 请考虑不要链接到 w3schools,这会伤害社区的眼睛。谢谢。
  • 感谢约书亚的回复。我看到一个 PHP 锁可以一次只允许一个用户访问 gpio.php 文件,但不知道如何实现一个计时器来限制从 gpio.php“外部”访问 php 文件的时间文件
  • @Mojorizing 这是另一个帖子的问题。我想建议您在寻求解决方案之前先尝试解决。尝试解决某事,即使您最终无法解决,也有助于进一步加深您对它的理解。这里有一个提示。 Cookies、客户端 JavaScript 休息查询(按计时器)和一个小型数据库,时间很重要,但顺序很重要,如果它们越界,那么下一个回合就是为你准备的。
  • 感谢您的提示 - 我将研究 cookie 等的使用情况。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-05
  • 1970-01-01
  • 2011-07-12
  • 2019-03-11
  • 2014-04-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多