2

我正忙着用 PHP 为客户重写一个质押管理系统。它基本上将捐赠者、筹款人、文件和承诺信息存储在数据库中。

在提交每个承诺后,我需要它打印两张发票,以及用户可以选择的任何所需文件。

在正常情况下,我会使用 PHP(顺便说一下,它在 Windows 上的本地服务器上)来打开 Word、打开文档、替换变量、保存和打印。但是,当使用 PHP 时,看不到该过程的进展情况。

因此,我想在 Delphi XE 中编写一个应用程序来为我处理这个问题,并通过自动打印队列在一个小弹出窗口中显示进度。PHP 应用程序在成功将数据插入数据库后,应该运行 Delphi 应用程序,然后打印文档。PHP 只需要以 JSON 或 CSV 格式将所需信息发送到应用程序。

这对我来说是有问题的部分:如何将这些数据放入某种队列中?我考虑过确保 Delphi 应用程序始终处于打开状态,并使用文本文件作为队列(每个作业都有换行符),但我不知道如何完全实现它以使其识别为实时队列。例如,如果应用程序当前正在打印,我如何让它看到另一个项目已同时添加到队列中?

或者,也许有更好的方法来进行队列管理?

4

2 回答 2

2

考虑使用ActiveMQApolloHornetQRabbitMQ等消息队列。Delphi 有(开源和商业)库,允许通过消息队列交换消息。

PHP 应用程序会将文档(文本或二进制数据)发送到消息队列,例如/queue/new_pledge. 消息存储在(ActiveMQ / HornetQ / RabbitMQ)消息代理上并在那里等待,直到 Delphi 客户端连接。如果 Delphi 应用程序连接,它会获取所有待处理的消息,类似于在邮件应用程序中阅读新电子邮件。发送方和客户端不必同时运行(异步操作)。

该解决方案还支持负载平衡:如果接收到的文档多于单个 Delphi 应用程序无法处理的数量,只需在更多计算机上启动其他实例即可。然后队列中的消息将在所有 Delphi 应用程序之间分发。

对于 PHP 端,有消息代理客户端库,它们使用一个名为 STOMP 的简单协议,这些开源消息代理支持该协议。

(我是 Delphi 和 Free Pascal 的Habari Client STOMP 库的作者,它支持五种不同的消息代理)


ps 操作系统中还有一个消息队列系统:Microsoft Message Queuing (MSMQ)

于 2013-01-28T22:20:45.623 回答
0

把事情简单化

使用 PHP 将信息发布json_encode()到 Indy httpserver Indy 10 Http Server 示例

利用 HTTP 协议的优势,而不是重新发明轮子。

使用这个单一单元在 Delphi http://sourceforge.net/projects/lkjson/中读取 JSON

于 2013-01-28T22:35:13.717 回答