我正在忙着为PHP中的客户端重写承诺管理系统。它基本上将捐赠者,筹款人,文件和承诺信息存储在数据库中。
在提交每份承诺后,我需要打印两份发票,以及用户可以选择的任何所需文件。
在正常情况下,我会获得PHP(顺便说一下,它在Windows上的本地服务器上)打开Word,打开文档,替换变量,保存和打印。但是,在使用PHP时,我们无法看到该过程的进展情况。
所以,我想在Delphi XE中编写一个为我处理这个问题的应用程序,并通过自动打印队列在一个小弹出窗口中显示进度。成功将数据插入数据库后,PHP应用程序应运行Delphi应用程序,然后打印文档。 PHP只需要以JSON或CSV格式将所需信息发送到应用程序。
这里有问题的部分:我怎样才能将这些数据放入某种队列?我一直在考虑确保Delphi应用程序始终处于打开状态,并将文本文件用作队列(每个作业都有换行符),但我不知道如何以识别它的方式完全实现它它作为一个实时队列。例如,如果应用程序当前正在打印,如何让它看到另一个项目同时添加到队列中?
或者,也许有更好的方法来进行队列管理?
答案 0 :(得分:2)
考虑使用ActiveMQ,Apollo,HornetQ或RabbitMQ等邮件队列。 Delphi的(开源和商业)库可用于允许通过消息队列交换消息。
PHP应用程序会将文档(文本或二进制数据)发送到消息队列,例如/queue/new_pledge
。消息存储在(ActiveMQ / HornetQ / RabbitMQ)消息代理上,并等待Delphi客户端连接。如果Delphi应用程序连接,它会提取所有待处理的消息,类似于在邮件应用程序中读取新的电子邮件。
发件人和客户端不必同时运行(异步操作)。
此解决方案还支持负载平衡:如果收到的文档多于单个Delphi应用程序可处理的文档,则只需在更多计算机上启动其他实例。然后,队列中的消息将在所有Delphi应用程序之间分发。
对于PHP方面,有一些消息代理客户端库使用一个名为STOMP的简单协议,这些协议由这些开源消息代理支持。
(我是Delphi和Free Pascal的Habari Client STOMP库的作者,它支持五个不同的消息代理)
P.S。操作系统中还有一个消息队列系统:Microsoft Message Queuing (MSMQ)。
答案 1 :(得分:0)
保持简单
使用json_encode()
将信息从PHP发布到Indy httpserver Indy 10 Http Server sample
使用HTTP协议的优点而不是重新发明轮子。
使用此单个单元在Delphi http://sourceforge.net/projects/lkjson/
中读取JSON