【问题标题】:Apache, javascript and PhoneGap : What's the best way to listen to some random event ? Interval or long polling?Apache、javascript 和 PhoneGap:收听一些随机事件的最佳方式是什么?间隔还是长轮询?
【发布时间】:2013-09-09 23:07:40
【问题描述】:

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

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

我有很多关于长轮询的例子,比如这里:How do I implement basic "Long Polling"?

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

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

请指教,谢谢:)

【问题讨论】:

  • 客户端 1 可以写入数据库,客户端 2 可以使用 cron 作业吗?

标签: php javascript apache api long-polling


【解决方案1】:

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

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

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

使用 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-05-14
    • 1970-01-01
    • 1970-01-01
    • 2011-04-10
    • 1970-01-01
    • 2011-05-01
    • 2012-07-10
    • 1970-01-01
    • 2011-06-18
    相关资源
    最近更新 更多