我试图了解如何在Twisted应用程序中保留数据。让我们说我已经决定写一个Twisted服务器:
一个典型的Twisted教程可以让你使用Deferreds和callbacks构建这个应用程序,粗略地说:
当然,这会在发生崩溃/重启/其他事件时持续存在NO数据。我得到的解决方案涉及第三方持久性数据存储(经常提到RabbitMQ),并且可能会提出十几个随机方法来实现结果。
但是,我想有一些方法在Twisted应用程序中效果最好。他们看起来怎么样?它们如何存储(并在发生崩溃时恢复)进程内消息?
答案 0 :(得分:0)
如果您发现了这个问题,您可能已经知道Twisted是基于事件的。听起来很简单,但最难的是#34;部分答案是让持久性平台在需要时生成我们需要的事件。当然,您可以将数据保存在数据库或消息队列中,但某些平台不会自然地生成事件。例如:
在其他情况下,事件很容易,但可靠性是一个问题:
隧道尽头的灯似乎像RabbitMQ。
为了我们的目的,RabbitMQ客户端为我们提供了基于事件的界面。
然而,在更理论的层面上,情况并非必须如此。事实上,尽管有"通知"上面的问题,ZeroMQ有一个event-based client。即使我们的软件基于事件优雅,我们也会遇到不适合的系统。在这些情况下,我们别无选择,只能依靠polling。原则上,如果不在实践中,我们只是在消息提供者中查询消息。当我们耗尽当前队列时(如果没有消息则立即耗尽),我们将来使用callLater命令再次检查。它可能会感觉反模式,但它(无论如何我知道)处理这种特殊情况的正确方法。