5

我有 PHP 服务器,我需要在其中更新客户端 A 的某些客户端 B 操作,目前它已完成。它通常是如何完成的?

我目前的解决方案是:

  1. A 对此表示公开$.ajax(...).done(function myCallBack(){...});呼吁。
  2. 当 A 在其中时,myCallBack(){...}它会发出另一个$.ajax(...).done(function myCallBack(){...});. 这样,与服务器的通信就可以随时接收新信息
  3. PHP 将不得不不断检查会话间通信文件以将数据传输到/从两个并发会话

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

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

4

2 回答 2

2

这就是我解决它的方法:

客户端A在 PHP 服务器端(会话)留下一个 open ajaxcall: , A锁定using并等待。$.ajax(...).done(function myCallBack(){...});semaphoresem_acquire($semaphore_A)

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

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

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

what took me so long to debug it, is the fact the I opened a session (session_start()) and didn't close it (session_ write_ close()) - which locked other processes and prevented any concurrency !

于 2012-09-15T21:42:57.013 回答
0

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

于 2012-08-22T12:16:25.057 回答