HTTP - 单个连接上的单个用户

时间:2016-12-26 22:57:58

标签: php apache

我有一个来自instructables.com的raspberry pi3运行这个项目 Simple and intuitive web interface for your Raspberry Pi

我需要使按钮起作用,这样一次只有一个用户可以按下按钮,而很多用户可以查看该页面。这是为了控制一个平移/倾斜网络摄像机,其中Button Zero平移摄像机左侧,Button One平移摄像机等。树莓驱动继电器驱动Pelco摄像机平移/倾斜安装中的电机。我无法让一个用户尝试向左平移,而另一个用户在另一个http连接上尝试向右平移。没有登录可以访问这个覆盆子。

是否有Apache2设置来完成此任务?我不认为可以通过向GPIO.php文件添加代码来解决这个问题,或者在那里?我可以使用semophore或$ global标志来限制多个并发查看器的按钮启动吗?

1 个答案:

答案 0 :(得分:0)

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

锁定系统上的本地文件

打开文件,并将其锁定以便写入。

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

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

PHP lock a file for writing

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

使用像MySQL这样的数据库

使用像MySQL这样的数据库,您可以锁定表中的特定行,实际上与上一个示例中的文件一样。

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

Lock a single row in MySQL

注意:您可以使用多行,其中每行可以表示如上所述的其他相机。

需要考虑的其他事项

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