Maison >développement back-end >tutoriel php >http请求之间实现操作系统层面的通信,有可能吗?
最近在做一个东西, 用python写, wsgi的接口, 部署在sae, sae的服务器应该是nginx吧. 当然, 解决方案不一定是python的, php也可以, 但是千万不要跟我说自己实现一个服务器, 现在是nginx, nginx... .
情况是这样的: 有两个并发的请求, 记作A和B吧, 对于服务器来说是两个线程. A执行到一半, 阻塞下来, 直到B给A发出信号, A才继续执行下去.
这样好像有一个蛮直观的方法: 在cache或者数据库里面设置一个布尔, 当作mutex用. 但是我阻塞的时候, 我就需要不停地去对数据库进行轮询, 这样耗费的资源实在太多. 所以我就想, 有没有办法曲线救国, 去调用系统里的(渣浪的系统大概是Linux, 也就是pthread的) mutex API呢. 如果两个请求同一个进程, 那么也许可以把mutex的地址保存到数据库......好吧我大概想多了.
不要用死循环(就算+sleep)去轮询, 我什么都愿意.
最近在做一个东西, 用python写, wsgi的接口, 部署在sae, sae的服务器应该是nginx吧. 当然, 解决方案不一定是python的, php也可以, 但是千万不要跟我说自己实现一个服务器, 现在是nginx, nginx... .
情况是这样的: 有两个并发的请求, 记作A和B吧, 对于服务器来说是两个线程. A执行到一半, 阻塞下来, 直到B给A发出信号, A才继续执行下去.
这样好像有一个蛮直观的方法: 在cache或者数据库里面设置一个布尔, 当作mutex用. 但是我阻塞的时候, 我就需要不停地去对数据库进行轮询, 这样耗费的资源实在太多. 所以我就想, 有没有办法曲线救国, 去调用系统里的(渣浪的系统大概是Linux, 也就是pthread的) mutex API呢. 如果两个请求同一个进程, 那么也许可以把mutex的地址保存到数据库......好吧我大概想多了.
不要用死循环(就算+sleep)去轮询, 我什么都愿意.
可否使用命名管道呢
查阅一下PHP官方文档 进程控制扩展 里面的 posix_kill 是否可以?
=_=! 不是太懂题主的意思,可能是说 A 和 B 一块运行,A运行到一半不运行了然后等待 B 的通知再执行,是这个意思么?
如果是这个意思的话我觉得你可以把 A 拆成 A' 和 C 两部分,A' 为接受 B 通知之前的代码,C 为接受 B 通知之后的代码。A' 和 B 执行完毕了都跳转到 C 去执行代码。C 代码首先要检测 A' 和 B 处理的内容是否完备,未完备则停止运行。当然处理的数据都最好用外部的存储存储起来。我觉得这样应该是最简单的实现方法了吧。
另外,如果是 SAE 的话就不要做他想了,限制超多的根本不太可能会让你接触到系统级别的接口之类的。