我正在构build一个应用程序,其中客户端(PhoneGap)正在等待某个事件被另一个客户端触发!
因此,模式当然是:客户端1发送消息(名称,消息和目标(客户端2)) – 服务器 – 客户端2接收消息(来自客户端1,消息,客户端1),这可能发生每秒或每小时。 没有规则。 它也可能只发生一次或从未..
我有很多关于长轮询的例子,如下: 我如何实现基本的“长轮询”?
我知道这与Apache一起使用是不好的。 所以我想知道在这种情况下,我应该使用setInterval?
我是否应该设置一个时间间隔来要求服务器检查数据库,如果我以前从客户端logging任何消息到另一个消息,并提供它? 或者这是一个糟糕的路要走?
请指教,谢谢:)
这将取决于消息的发送频率,以及是否需要实时处理这些消息。 如果是这种情况,我会考虑实施HTML 5 Web套接字。
这里有一篇很好的文章可以帮助你开始,如果你读到最后你会发现有一个跨浏览器问题的解决方案(使用socket.io库),这将回退到长轮询和其他技术来实现你想要什么。
如果您不需要实时处理这些消息,并且您的应用程序可以等待一段时间来执行基于已存储在存储库(例如数据库)中的消息的某个操作,那么我会使用javascript
web用setInterval
调用REST服务来检查这些消息。 这是一篇很好的文章。
使用网络工作者的原因是他们不会在检查新消息时阻塞用户界面,所以可用性会更好。
这是一个网络工作者的一个小例子:
使用webworker
var worker = new Worker("http://mydomain.com/worker.js"); worker.onmessage = function(event) { //new message received, do something in the UI } worker.postMessage("start");
Web Worker(worker.js)
this.onmessage = function(event) { postMessage("worker started"); } //Period of time to check for the messages setInterval(function() { getNewMessage() }, 5000); function getNewMessage() { //Call your REST service here and respond back to the main js thread if a new //message is received postMessage("New message received!"); }
希望这可以帮助