在数据库端实现Comet

时间:2009-05-31 22:31:52

标签: database comet server-side

这更多是出于好奇和“供将来参考”而不是任何事情,但Comet如何在数据库端实现?我知道大多数实现使用长期HTTP请求“等待”直到数据可用,但是如何在服务器端完成? Web服务器如何知道新数据何时可用?它是否经常轮询数据库?

2 个答案:

答案 0 :(得分:1)

这非常依赖于应用程序。最可能的实现是某种消息传递系统。

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

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

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

实施消息传递的方式同样非常依赖于应用程序。一个非常简单的实现只会使用一个名为messages的数据库表并进行轮询。

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

在Rails中,我正在使用Juggernaut,它只是监听一些网络端口。每当有数据要发送时,Rails应用程序服务器就会打开与此juggernaut推送服务器的连接,并告诉它向客户端发送什么。

答案 1 :(得分:1)

你在使用什么数据库?如果它支持触发器,许多RDBMS以某种形式或形式执行,那么您可以让触发器触发一个实际告诉HTTP请求发出适当响应的事件。

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

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