代码之家  ›  专栏  ›  技术社区  ›  Sasha Chedygov

在数据库端实现Comet

  •  2
  • Sasha Chedygov  · 技术社区  · 15 年前

    这更多是出于好奇心和“供将来参考”而非其他原因,但是Comet是如何在数据库端实现的呢?我知道大多数实现使用长期存在的HTTP请求来“等待”直到数据可用,但是这在服务器端是如何做到的呢?Web服务器如何知道新数据何时可用?它是否经常轮询数据库?

    2 回复  |  直到 15 年前
        1
  •  1
  •   nategood    15 年前

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

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

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

        2
  •  1
  •   levinalex    15 年前

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

    最有可能的是,您的服务器端代码将由相当多的部分组成:

    • 一些应用服务器可以处理传入的请求,
    • 一个(独立的)Comet服务器,处理所有与客户机的开放连接,
    • 数据库,以及
    • 某种消息传递基础结构

    最后一个,消息传递基础结构是关键。这为应用服务器提供了一种与Comet服务器对话的方式。所以当一个请求进入应用服务器时,它会将一条消息放入消息队列,告诉Comet服务器通知正确的客户机。

    消息传递的实现方式同样与应用程序非常相关。一个非常简单的实现只需要使用一个名为 messages 然后投票。

    但是,根据您计划使用的堆栈,应该有更多的特定工具可用。

    在我使用的轨道上 Juggernaut 它只是在某个网络端口上监听。每当有数据要发送时,Rails应用服务器就会打开到这个强大的推送服务器的连接,并告诉它发送到客户机的内容。