这更多是出于好奇和“供将来参考”而不是任何事情,但Comet如何在数据库端实现?我知道大多数实现使用长期HTTP请求“等待”直到数据可用,但是如何在服务器端完成? Web服务器如何知道新数据何时可用?它是否经常轮询数据库?
答案 0 :(得分:1)
这非常依赖于应用程序。最可能的实现是某种消息传递系统。
最有可能的是,您的服务器端代码将包含很多部分:
最后一个,消息传递基础设施确实是关键。这为app服务器提供了与comet服务器通信的方法。因此,当请求进入时,应用服务器会将消息放入消息队列,告知彗星服务器通知正确的客户端
实施消息传递的方式同样非常依赖于应用程序。一个非常简单的实现只会使用一个名为messages
的数据库表并进行轮询。
但是根据您计划使用的堆栈,应该有更多复杂的工具可用。
在Rails中,我正在使用Juggernaut,它只是监听一些网络端口。每当有数据要发送时,Rails应用程序服务器就会打开与此juggernaut推送服务器的连接,并告诉它向客户端发送什么。
答案 1 :(得分:1)
你在使用什么数据库?如果它支持触发器,许多RDBMS以某种形式或形式执行,那么您可以让触发器触发一个实际告诉HTTP请求发出适当响应的事件。
触发器不需要轮询......轮询通常不是最好的主意。
PostgreSQL似乎有很好的支持(甚至是PL / Python)。