我正忙着用 PHP 为客户重写一个质押管理系统。它基本上将捐赠者、筹款人、文档和 promise 信息存储在数据库中。
提交每项 promise 后,我需要它打印两张发票以及用户可能选择的任何所需文件。
在正常情况下,我会使用 PHP(顺便说一句,它位于 Windows 的本地服务器上)来打开 Word、打开文档、替换变量、保存和打印。然而,当使用 PHP 时,人们无法看出该过程已经进行到什么程度。
所以,我想在 Delphi XE 中编写一个应用程序来为我处理这个问题,并通过自动打印队列在一个小弹出窗口中显示进度。 PHP 应用程序在成功将数据插入数据库后,应运行 Delphi 应用程序,然后打印文档。 PHP 只需要以 JSON 或 CSV 格式将所需信息发送到应用程序。
这对我来说是有问题的部分:如何将这些数据放入某种队列中?我考虑过确保 Delphi 应用程序始终打开,并使用文本文件作为队列(每个作业都有换行符),但我不知道如何以将其识别为的方式完全实现它实时队列。例如,如果应用程序当前正在打印,我如何让它看到另一个项目已同时添加到队列中?
或者,也许有更好的方法来进行队列管理?
最佳答案
考虑使用像 ActiveMQ 这样的消息队列, Apollo , HornetQ或RabbitMQ 。 Delphi 有(开源和商业)库,允许通过消息队列交换消息。
PHP 应用程序会将文档(文本或二进制数据)发送到消息队列,例如 /queue/new_pledge
。消息存储在(ActiveMQ/HornetQ/RabbitMQ)消息代理上,并在那里等待,直到 Delphi 客户端连接。如果 Delphi 应用程序连接,它会获取所有待处理的消息,类似于在邮件应用程序中阅读新电子邮件。
发送方和客户端不必同时运行(异步操作)。
该解决方案还支持负载平衡:如果收到的文档多于单个 Delphi 应用程序可以处理的数量,只需在更多计算机上启动其他实例即可。然后队列中的消息将在所有 Delphi 应用程序之间分发。
对于 PHP 端,有消息代理客户端库,它们使用名为 STOMP 的简单协议(protocol),这些开源消息代理支持该协议(protocol)。
(我是 Delphi 和 Free Pascal 的 Habari Client STOMP 库的作者,它支持五种不同的消息代理)
附:操作系统中也已有一个消息队列系统:Microsoft Message Queuing (MSMQ) 。
关于php - 创建从 PHP 到 Delphi 的应用程序打印队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14556619/