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