0

我正在构建一个应用程序,其中客户端(PhoneGap)正在等待另一个客户端触发某些事件!

因此,模式当然是:客户端 1 发送一条消息(名称、消息和目标(客户端 2))-服务器-客户端 2 接收消息(来自客户端 1、消息、客户端 1.名称)这可能每秒或每小时发生一次。没有规则。它也可能只发生一次或永远不会发生..

我有很多关于长轮询的例子,比如这里:如何实现基本的“长轮询”?

我知道将它与 Apache 一起使用是不好的。所以我想知道在这种情况下我是否应该使用 setInterval 代替?

如果我之前记录了从客户端到另一个客户端的任何消息并传递它,我是否应该设置一个间隔来要求服务器检查数据库?或者这是一个不好的方法?

请指教,谢谢:)

4

1 回答 1

1

这将取决于发送消息的频率以及您是否需要实时处理它们。如果是这种情况,我会考虑实现 HTML 5 Web Sockets。

是一篇可以帮助您入门的好文章,如果您将其阅读到最后,您会发现还有一个解决跨浏览器问题的解决方案(使用socket.io库),它可以回退到长轮询和其他技术来实现你想要什么。

如果您不需要实时处理消息并且可以让您的应用程序等待一段时间以根据已经存储在数据库等存储库中的消息执行某些操作,我会使用javascript网络工作者使用 asetInterval调用 REST 服务检查这些消息。是一篇与此相关的好文章。

使用 web worker 的原因是他们在检查新消息时不会阻塞 UI,因此可用性会更好。

这是一个 web worker 的小例子:

使用网络工作者

var worker = new Worker("http://mydomain.com/worker.js");

worker.onmessage = function(event) {
   //new message received, do something in the UI
}

worker.postMessage("start");

网络工作者 (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!");
}

希望这可以帮助

于 2013-09-06T01:09:35.947 回答