我需要实现两个应用程序之间的数据交换。这两个应用程序将在局域网中运行在不同的计算机上。
在Delphi中,我们该如何实现呢?
有没有免费的组件可以使跨计算机之间的应用程序数据交换变得更加容易?
DCOM曾经是一种很好的进程间通信方法,这也是Delphi的优点之一。但今天我强烈建议不要使用它。
根据您项目的性质,我建议选择以下两种方式之一:
看看使用“远程过程调用”类型接口的解决方案。我通常使用RemObjects SDK来处理这种情况,但是也有RealThinClient的开源版本可以胜任。
这两个工具都允许您创建一个连接,对于大部分代码而言是“透明”的,您只需调用一个接口即可将数据发送到远程并获取结果。然后您可以像平常一样编程,忘记套接字等细节。
这是其中一种情况,在这种情况下,真正没有一个“最好”的答案,因为已经讨论过的任何技术都可以用于在两个应用程序之间准确通信。选择使用哪种方法将取决于您通信的重要性以及必须从一个工作站传输多少数据。
如果您的通信不是时间敏感或关键性的,则定期对数据库或文件进行简单的轮询可能足以满足需求。如果您的通信很关键且时间敏感,则值得追求在每个客户端中放置TCPIP服务器。如果只是时间敏感,则邮槽是一个很好的选择,如果很关键但不是时间敏感,则命名管道。
可能最简单的方法是读写一个文件(或者每个方向可能有一个文件)。它的优点是易于模拟和跟踪。然而,它并不是最快的选项(并且听起来肯定很无聊 ;-))。
对于 Delphi 应用程序集成,面向消息的中间件 可能是一个选项。消息代理提供了保证交付、负载平衡、不同的通信模型,并且可以跨平台和跨语言工作。开源消息代理包括:
(免责声明 - 我是这些服务器的 Delphi / Free Pascal 客户端库的作者)
一个可能的解决方案是通过网络“共享”对象。
使用类似于我们的little mORMot的客户端-服务器ORM,这是可能的。
这个开源库可以在Delphi 6到XE2上运行,并使用JSON进行传输。它包括一些安全功能(涉及RESTful身份验证机制),并且可以使用任何数据库 - 或者根本不使用数据库。
特别是请参阅提供的前四个示例和相关文档。