如何在PHP和JS中的并发会话之间进行通信?

时间:2012-08-22 12:12:05

标签: php javascript jquery concurrency ipc

我有PHP服务器,其中我需要更新客户端A关于某些客户端B操作,此时它已完成。如何正常完成?

我目前的解决方案是:

  1. A为此打开$.ajax(...).done(function myCallBack(){...});电话。
  2. 当A位于myCallBack(){...}时,它会发出另一个$.ajax(...).done(function myCallBack(){...});。通过这种方式,与服务器的通信可随时保持打开以便随时接收新信息
  3. PHP必须不断检查会话间通信文件以向/从两个并发会话传输数据
  4. $.ajax(...).done(function myCallBack(){...});开放(并且一直产生新的)会是这样做的吗?

    对于会话间通信 - 有没有办法发出事件或类似事件的信号(而不是连续监视某些文件[浪费资源!])?

2 个答案:

答案 0 :(得分:2)

这就是我解决它的方法:

客户 A 在PHP服务器端(会话)上打开ajax电话:$.ajax(...).done(function myCallBack(){...}); 使用semaphore锁定sem_acquire($semaphore_A),然后等待。

客户 B 使用$semaphore_A删除信号量sem_remove($semaphore_A),从而释放 A 返回客户端JS回调myCallBack()

当然,它非常简单,我使用shared-memory (e.g. shm_attach())在进程之间交换状态和数据。

对于其他坚持使用此技术的开发人员:

我花了这么长时间来调试它,是因为我打开了一个会话(session_start())而没有关闭它(session_ write_ close()) - 它锁定了其他进程并阻止了任何并发!

答案 1 :(得分:1)

客户端A将数据发送到服务器,客户端B需要轮询服务器以请求更改。当有变化时,客户B会在下次轮询时获得它们。