我有PHP服务器,其中我需要更新客户端A关于某些客户端B操作,此时它已完成。如何正常完成?
我目前的解决方案是:
$.ajax(...).done(function myCallBack(){...});
电话。myCallBack(){...}
时,它会发出另一个$.ajax(...).done(function myCallBack(){...});
。通过这种方式,与服务器的通信可随时保持打开以便随时接收新信息让$.ajax(...).done(function myCallBack(){...});
开放(并且一直产生新的)会是这样做的吗?
对于会话间通信 - 有没有办法发出事件或类似事件的信号(而不是连续监视某些文件[浪费资源!])?
答案 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会在下次轮询时获得它们。