我正在尝试设计一个事件驱动的系统,其中系统的元素通过生成由系统的其他组件响应的事件来进行通信。组件旨在彼此独立 - 或者尽可能独立于我可以制造它们。该系统最初将在Windows 7上实现,并且正在用Delphi编写。生成的事件将由Delphi代码生成。我理解如何在一台机器上实现所述类型的系统。
我希望设计这个系统,以便它可以很容易地部署在不同的机器架构上,特别是在分布式架构上运行的不同组件,这可能与Windows 7不同。不需要系统进行通信任何系统外部的任何系统。
我尝试过调查我需要考虑的架构并查看下面提到的问题。这些似乎指向利用命名管道作为硬件间通信的机制。作为这些调查的结果,我概述了以下内容来描述我的系统 - 图表的第一部分是我正在开发的系统;我推断的第二部分是将来可能实现的。
这导致了以下几点:
How is event driven programming implemented? How do I send a string from one instance of my Delphi program to another?
修改
我没有充分考虑“@I给出垃圾答案”的回应。我对他的观点的初步回应是:
答案 0 :(得分:3)
为了获得最大的部署灵活性(独立于操作系统),我建议您查看在Java平台上运行的流行的开源消息代理。使用标准协议。它们与Delphi和其他编程语言很好地集成,可以与Web应用程序一起使用,并且拥有大量安装的用户群和活跃的社区。 p>
它们可以在几分钟内轻松安装和配置,并且可以使用Delphi的免费/商业客户端。
一些例子是:
我还推荐Martin Fowler的“企业集成模式”一书作为概述和介绍,有许多简单的方法来处理特定的问题。
请注意,我是企业邮件系统的商业Delphi客户端的开发人员,例如xmlBlaster,RabbitMQ,Amazon Simple Queue Service和上面提到的三个代理。
答案 1 :(得分:2)
我只能在这里回答你的观点4:你还没有决定一个事件是同步还是异步。在异步情况下,您必须决定在邮件到达时要执行的操作。你有队列吗?队列有多大?可以抓取队列中的任意元素,还是严格的FIFO。如果消息丢失(有人绕过网络电缆)会发生什么?
在同步变体中,优势在于您获得了送货保证,但是当连接突然丢失时您会怎么做?
连接丢失将成为一个问题。你拥有的机器越多,它们发生的可能性就越大。决定你将如何处理。
如果你有一个大型活动和一些小活动,你可能会遇到另一个麻烦。传输FIFO的顺序还是最小的?活动可以重新排序吗?这里有什么假设?
除此之外,我经常攻击Erlang。在Erlang中,所有事件处理都已经解决,但这也意味着为您选择了特定的模型(异步,无界队列,无法保证传输,但检测到连接丢失)。
答案 2 :(得分:1)
我建议看看RabbitMQ,http://www.rabbitmq.com/。它有服务器和客户端。只需要在delphi中使用一些包装代码,您就可以构建业务逻辑了
干杯
答案 3 :(得分:0)
这可能只是一个消息队列的应用程序。
http://msdn.microsoft.com/en-us/library/ms632590(v=vs.85).aspx