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

Tar*_*Tar 5 javascript php concurrency jquery ipc

我有PHP服务器,其中我需要更新客户端A关于一些客户端B动作,此刻它已经完成.通常如何完成?

我目前的解决方案是:

  1. A公开$.ajax(...).done(function myCallBack(){...});呼吁.
  2. 当A在myCallBack(){...}其中时发出另一个$.ajax(...).done(function myCallBack(){...});.这样,与服务器的通信保持打开状态,以便随时接收新信息
  3. PHP必须不断检查会话间通信文件,以便向/从两个并发会话传输数据

离开$.ajax(...).done(function myCallBack(){...});(并一直产生新的)是这样做的方法吗?

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

Tar*_*Tar 2

这就是我解决它的方法:

客户端A留下一个开放的ajax调用::$.ajax(...).done(function myCallBack(){...});在PHP服务器端(会话),A锁定一个semaphore使用sem_acquire($semaphore_A)并等待。

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

当然,这非常简单,我使用共享内存(例如shm_attach()在进程之间交换状态和数据。

对于坚持这种技术的其他开发人员:

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