【问题标题】:Implementing Comet on the database-side在数据库端实现 Comet
【发布时间】:2009-05-31 22:31:51
【问题描述】:

这更多是出于好奇和“供将来参考”,但 Comet 在数据库端是如何实现的呢?我知道大多数实现都使用长期存在的 HTTP 请求来“等待”直到数据可用,但是这是如何在服务器端完成的呢? Web 服务器如何知道新数据何时可用?它会不断地轮询数据库吗?

【问题讨论】:

    标签: database comet server-side


    【解决方案1】:

    您使用的是什么数据库?如果它支持 triggers,许多 RDBMS 以某种形式或形式做到这一点,那么您可以让触发器触发一个事件,该事件实际上告诉 HTTP 请求发送适当的响应。

    触发器消除了轮询的需要...轮询通常不是最好的主意。

    PostgreSQL 似乎有很好的支持(甚至是 PL/Python)。

    【讨论】:

      【解决方案2】:

      这在很大程度上取决于应用程序。最可能的实现是某种消息传递系统。

      很可能,您的服务器端代码将包含很多部分:

      • 一些处理传入请求的应用服务器,
      • 一个(独立的)comet 服务器,用于处理与客户端的所有打开连接,
      • 数据库和
      • 某种消息传递基础架构

      最后一个,消息传递基础设施确实是关键。这为应用服务器提供了一种与彗星服务器通信的方式。因此,当请求进入应用服务器时,应用服务器会将消息放入消息队列中,告诉彗星服务器通知正确的客户端

      如何实现消息传递同样非常依赖于应用程序。一个非常简单的实现就是使用一个名为 messages 的数据库表并对其进行轮询。

      但根据您计划使用的堆栈,应该有更复杂的工具可用。

      在 Rails 中,我使用的是 Juggernaut,它只是侦听某个网络端口。每当有数据要发送时,Rails 应用程序服务器都会打开与这个主宰推送服务器的连接,并告诉它要发送什么给客户端。

      【讨论】:

      • 没有直接回答我的问题,但 +1 的描述(以及与剑圣的链接,因为我使用 Ruby)。
      猜你喜欢
      • 2010-11-08
      • 2011-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-03
      • 2010-09-09
      • 1970-01-01
      相关资源
      最近更新 更多