同步Ajax响应

时间:2011-01-04 05:19:50

标签: php ajax codeigniter

我在codeigniter环境中,我想做这样的事情。 有一个聊天室,有一个O-Wner和一些C-lients。 这就是我想写的东西

1)C加入房间。

2)准备好后,所有Cs点击发送ajax请求的“就绪”链接

3)C等待所有C准备好,然后发出信号通知所有客户端并发送先前的ajax响应

4)当C接收到响应时(应该在所有客户端的相同时刻),他们开始做他们必须做的事情:)

是否有一种简单的方法可以跟踪所有连接的客户端,以便我可以同时发出信号?

现在我陷入了第3步。我有一个像这样的代码

$.ajax({ 
url: 'myurl.php',
success: function() { doStuff(); }
});

在我的hypotethic文件myurl.php中我有

while ($this -> MyModel -> waitingQueue) {
sleep(1) }
return "ok";

我想这不是一个好方法,因为当我在模型中更改变量“waitingQueue”时,我无法控制所有客户端是否在同一个实例中收到响应。

全部谢谢!

2 个答案:

答案 0 :(得分:1)

您可以尝试使用服务器上所有客户端的常规ajax检查来模拟同步。检查jQuery.queue函数,使用SetInterval启动队列轮询,然后推送包含该队列中的检查的函数(并在这些函数中刷新队列)。

如果你想更进一步,你应该看看'Comet'和持久的HTTP连接,试图将PUSH行为放在HTTP中,但这并不简单:-)至少如果你得到完整的控制您的网络,服务器,连接到您的应用程序的人(如内联网),这将更加简单。

或者您可以查看现已关闭的项目google wave上的文档。

答案 1 :(得分:0)

我建议在javascript中使用setInterval()。所以你可以连续检查服务器状态。

我认为你不能简单地同步你的客户。并且他们不会同时从服务器得到答案。

如果您同步所有客户端的监视并安排集合时间点,当客户端shell触发事件时,您可能会有很好的机会。

...不要忘记clearInterval()