【发布时间】:2009-05-31 22:31:51
【问题描述】:
这更多是出于好奇和“供将来参考”,但 Comet 在数据库端是如何实现的呢?我知道大多数实现都使用长期存在的 HTTP 请求来“等待”直到数据可用,但是这是如何在服务器端完成的呢? Web 服务器如何知道新数据何时可用?它会不断地轮询数据库吗?
【问题讨论】:
标签: database comet server-side
这更多是出于好奇和“供将来参考”,但 Comet 在数据库端是如何实现的呢?我知道大多数实现都使用长期存在的 HTTP 请求来“等待”直到数据可用,但是这是如何在服务器端完成的呢? Web 服务器如何知道新数据何时可用?它会不断地轮询数据库吗?
【问题讨论】:
标签: database comet server-side
您使用的是什么数据库?如果它支持 triggers,许多 RDBMS 以某种形式或形式做到这一点,那么您可以让触发器触发一个事件,该事件实际上告诉 HTTP 请求发送适当的响应。
触发器消除了轮询的需要...轮询通常不是最好的主意。
PostgreSQL 似乎有很好的支持(甚至是 PL/Python)。
【讨论】:
这在很大程度上取决于应用程序。最可能的实现是某种消息传递系统。
很可能,您的服务器端代码将包含很多部分:
最后一个,消息传递基础设施确实是关键。这为应用服务器提供了一种与彗星服务器通信的方式。因此,当请求进入应用服务器时,应用服务器会将消息放入消息队列中,告诉彗星服务器通知正确的客户端
如何实现消息传递同样非常依赖于应用程序。一个非常简单的实现就是使用一个名为 messages 的数据库表并对其进行轮询。
但根据您计划使用的堆栈,应该有更复杂的工具可用。
在 Rails 中,我使用的是 Juggernaut,它只是侦听某个网络端口。每当有数据要发送时,Rails 应用程序服务器都会打开与这个主宰推送服务器的连接,并告诉它要发送什么给客户端。
【讨论】: