【问题标题】:Fake a push notification with ajax/setInterval?使用 ajax/setInterval 伪造推送通知?
【发布时间】:2012-06-30 02:55:29
【问题描述】:

我想知道在服务器端与客户端处理 <div> 自动更新的利弊。我正在将 Apache 与 PHP 一起使用,但只是想在 Javascript 中伪造推送通知,如下所示:

setInterval(queryDatabaseForUnreadMessages, 60000);

function queryDatabaseForUnreadMessages(){
   $.ajax({
       url: "/messages/queryDatabaseForUnreadMessages",
       success:function(data){
          $('div#littleRedCircle').html(data);
       }
   });
}

我只想像 Stackoverflow 一样设置一个通知(带有数字的红色小圆圈),让人们知道他们收到了一条新消息(如果存在)。那个简单的 AJAX/setInterval 组合是个坏主意吗?

【问题讨论】:

  • 推送通知是实时的,但 pull => ajax 轮询接近实时:P 在第二种情况下,您很难决定轮询间隔
  • @Tamil 谢谢,为什么这么难?每分钟都是一个坏主意吗?
  • 我看不出有什么问题,但也有服务器信号(长轮询)。在 c# 中,我们有 SignalR,但我不知道 PHP 有什么可用的。
  • 谢谢,我正在研究 PHP 解决方案...
  • 研究在 Python/Tornado 和 SockJS 中使用 websockets。在与 PHP 应用程序不同的应用程序层中运行,但在没有 Python 知识的情况下很容易设置。使用 HAProxy 或 Varnish 在同一台服务器上运行它

标签: javascript apache push-notification comet long-polling


【解决方案1】:

服务器推送的唯一缺点是实施成本(时间、金钱)

服务器推送是要走的路,因为

  1. 从用户的角度来看,实时通知更好
  2. 它具有可预测的成本(因此具有可扩展性)
  3. 减少带宽消耗
  4. 节省服务器负载

这取决于你的具体要求选择哪一个,因为服务器端推送的实现成本并不小,因为它不是一个 PHP 脚本的问题,而是需要深度服务器集成(也许你会有完全安装另一个 HTTP 服务器)并涉及其他通常不使用 PHP 构建的软件(消息队列?)

【讨论】:

  • 嗨@Raffaele,谢谢,我只是一个没有经验的单人操作,所以现在时间和金钱是一个真正的问题。出于您提到的 4 个原因,我想实施服务器推送,但目前这对我来说可能具有挑战性?
  • 不,不必这样 :) 有很多软件包可以做这些事情,它们既免费又易于设置(嗯,多么容易真的取决于你的技能),但如果你想把它放在网上可能会很贵,而在本地网络上进行实验是可以的
  • 嗨@Raffaele,我现在正在尝试推送通知。我的网站上运行着 Pusher.com 的服务。不幸的是,他们的免费服务仅支持 20 个连接。哪些网站只需要 20 个同时连接?这似乎是一个很小的数字。你能说一下你发现哪些推送通知库/包是好的吗?我正在考虑 Amazon SNS/SQS,但这个特定 AWS 服务的代码示例特别不存在,所以我很难将如何使用它的全貌放在脑海中。想法?
  • -@Raffaele,我也见过socket.io,但就像 Amazon SNS/SQS 一样,我在连接他们文档中的点时遇到了麻烦......
  • Socket.IO 非常好。请注意,它需要自己的 HTTP 服务器,所以 - 再次 - 可以进行本地测试,但是如果您想将其放到网上,共享的 PHP 主机将不够
【解决方案2】:

来自 IETF 文档

Long Polling in Contrast with Pull

What are the issues with Long Polling though? 来自文档

  1. 标题开销
  2. 最大延迟
  3. 连接建立
  4. 分配的资源
  5. 优雅降级
  6. 超时和缓存

正如我在评论中提到的那样

长轮询是实时的,而拉取是接近实时的[由轮询间隔确定]

Pull 认为客户端的带宽是理所当然的:P

正如文档中提到的,这两种技术都很好地利用了 HTTP 1.1 的持久连接。

Pull 易于实现并且跨浏览器得到很好的支持。虽然Push 缺少这一点,但图书馆可以拯救;)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-12
    • 1970-01-01
    • 1970-01-01
    • 2016-04-21
    • 1970-01-01
    • 2015-08-19
    • 2018-12-09
    相关资源
    最近更新 更多