当前位置: 首页 > 面试题库 >

客户通知,我应该使用AJAX推送还是轮询?

步弘和
2023-03-14
问题内容

我正在开发一个简单的通知服务,该服务将用于向浏览网站的用户传递消息。通知不必实时发送,但是如果通知发生的频率比每5分钟说一次的频率高,则可能会带来更好的用户体验。向客户端发送和从客户端发送的数据不是很大,这是直接检索数据的数据库查询。

在阅读有关该主题的其他对话时,似乎会发现AJAX推送会导致更高的服务器负载。由于我可以忍受更长的服务器延迟,因此值得让服务器推送通知或进行简单轮询。

实施推送方案并不难,所以我想我会明白这里的想法。

谢谢你的帮助。

编辑:我研究了一个简单的AJAX Push,并根据Mike
Purvis的这篇文章实现了一个简单的演示。初始版本的客户端负载相当低,约为5k,并且预计将在相当长的时间内保持这种状态。

谢谢大家的答复。我决定采用轮询解决方案,但将其全部包装在实用程序库中,这样,如果他们以后想更改它,就更容易了。


问题答案:

因为使用推送要求在服务器和每个客户端之间维护开放的HTTP连接,所以我也要进行轮询-
不仅要消耗大量服务器资源,而且要花很多时间才能解决如提到的亚光b那样实施。

我在轮询方面的经验是,如果在足够繁忙的站点上有足够频繁的轮询间隔,则Web服务器日志可能很快就会被真正的轮询请求所淹没。

编辑(2017)
:我想说你现在的选择是在websocket和长轮询之间(在另一个答案中提到)。听起来很长轮询可能是正确的选择,这取决于问题提到不需要实时接收通知的方式,很少的轮询时间很容易实现,并且不会对服务器造成很大的负担。Websocket很酷,如今对于许多应用程序来说都是不错的选择,但是听起来在这种情况下可能会显得过大。



 类似资料:
  • 在我的iOS应用程序中,我需要通知用户远程设备上的一些紧急事件。无论应用程序的状态如何,用户都需要获得警报:如果应用程序处于前台、后台模式,甚至被杀死。 根据Apple文档,只有“voip”后台模式允许“保持活动”功能在后台与服务器保持连接。但“voip”模式只允许用于真正的voip应用程序,我的应用程序不提供任何voip服务。因此,我认为我的案例的唯一选择是使用Apple推送通知。 当用户的iO

  • 问题内容: 我正在使用c / c 为osx和linux开发命令行界面可执行文件。该项目将链接到opencv。我应该使用libc 还是libstdc ++? 问题答案: 我会为每个操作系统使用本机库,即GNU / Linux上的libstdc 和Mac OS X上的libc 。 libc 在GNU / Linux上不是100%完整的,而libstdc 更完整时使用libc并没有真正的优势。另外,如果

  • 问题内容: 和CSS 和有什么不一样?我应该使用哪一个?为什么? 问题答案: 所有这些答案似乎都是不正确的。与直觉相反,在CSS 中不是pixel 。至少不是在简单的物理意义上。 从W3C,EM,PX,PT,CM,IN…阅读本文,了解如何为CSS发明一个“神奇的”单元。的含义因硬件和分辨率而异。(该文章是最新的,最新更新为2014-10。) 我自己的思考方式: px单位是CSS的魔术单位。它与当前

  • 问题内容: 我正在一个将Angular和Underscore都作为依赖项的项目。 当我需要创建对象的副本时,根据当时的心情,我可以使用或 在我看来,这些方法中的一种可能比另一种更快速/可靠/健壮。 假设已经包含两个库,那么这两个函数中的任何一个是否存在使另一个函数更好或更坏使用的已知问题? 问题答案: 关于您的问题: angular.copy和_.clone是不同的。这不是哪个更好的问题,而是关于

  • 问题内容: 我想从文本文件中读取每一行并将它们存储在ArrayList中(每一行是ArrayList中的一项)。 到目前为止,我知道BufferedInputStream写入缓冲区,并且仅在缓冲区为空时才进行另一次读取,这可以最大程度地减少或至少减少操作系统的操作量。 我正确吗-我说得通吗? 如果以上情况是在任何情况下,任何人都想使用DataInputStream。最后,我应该使用这两个中的哪一个

  • C:\Users\USER\Desktop\Table-of-day-v-2\app npm错误!此运行的完整日志可在以下位置找到: npm ERR!C:\Users\USER\AppData\Local\npm-cache\u logs\2021-10-08T15\u 15\u 54\u 627Z-debug.log