在较高的层次上,我需要做的是有一个python脚本,它根据从各种应用程序接收到的命令执行一些操作。在这个阶段,还不清楚应用程序是什么。它可以是另一个python程序、MATLAB应用程序或LAMP配置。命令很少被发送,大约每小时发送几次。在
问题是-对于python脚本来说,接收这些命令并向这些应用程序表明它已经接收到这些命令的最佳方式是什么?
现在,我要做的是有一个简单的.txt文件。应用程序将向文件写入命令。python脚本将读取它,执行它的任务,并从文件中删除该命令。在
我不喜欢这种方法有两个原因- 1) 如果文件由python编写/读取,而应用程序发送了一个新命令,会发生什么情况? 2) 这是一个复杂的方法,不会带来任何健壮和重要的结果。在
集成模式
可用于此目的的集成模式很少。在
消息传递允许通过通信约定的消息进行解耦,其余的都作为平台特定的细节保留,这不会影响其他方。在
另一种方法可以是共享数据存储——一方将处理请求存储在那里,另一方将获取请求并进行处理。在
使用ZeroMQ的消息传递集成模式
ZeroMQ是一个库,允许非常轻量级的消息传递,而不需要运行一些大型消息传递应用程序。在
你所描述的可以这样解决:
由于客户机使用多种语言,您应该使用一些跨平台的序列化,结果缓冲区甚至更好的JSON字符串都是不错的选择。在
ZeroMQ有许多语言库,因此您应该能够进行通信。在
有一个很好的ZeroMQ Guide提供了概念的清晰解释,并显示了许多语言的实现。在
为了规划通信基础设施,我将从您的Python脚本绑定到某个TCP端口(被“固定”部分)和连接到该端口的客户端开始。在
Python脚本将使用REP socket(用于“reply”),您的客户机使用其他语言REQ socket。在
以下示例来自zguide中为多种语言编写的huge set of examples
Python服务器代码示例(
hwserver.py
):示例PHP客户端(
^{pr2}$hwclient.php
):共享数据存储集成
共享文件或数据库还允许进程之间进行通信。如果锁定资源、注意同一个任务不是由多个工人处理等,问题就变得复杂了
结论
有多种模式和多种平台需要实现。在
Python
从早期阶段起就为ZeroMQ提供了一个非常舒适的PyZMQ
绑定MATLAB
也可以有相同的直接ZeroMQ,用于多对多通信。在故事就从这里开始。。。在
让我换个更广阔的视角
从一些关键的要点来看,这些要点是(pitty对此很满意,但羞耻感和烈焰都会落到各自的开发人员身上)
在我们今天遇到的其他软件工程“产品”和“堆栈”中并不常见:
[1]ZeroMQ首先是一个非常强大的概念,而不是代码或DIY工具包
[2]ZeroMQ对于任何专业级项目的最大优势都是而不是使用真正的可伸缩的正式通信模式端到端,而不是编码或“欺骗/修改”已发布的内部结构
由强大的MQ团队(强大的技术支持团队)在MQ的强大支持下进行了卓有成效的工作。在
说到这几条原则,我的建议是,花一点时间在概念上,,Peter Hintjens在ZeroMQ上出版的一本书(也有PDF格式)是一个值得开始的地方,以获得更大的图景。在
那么,就有了一个问题,那就是用几个SLOC-s来让这个世界变得最强大(相信我,这听起来很大胆,因为没有多少真正的替代品可以与ZeroMQ相比。。。好吧,ZeroMQ的联合架构师Martin Sustrik的[nanomsg]就是这种情况,至少可以提一提,如果您需要更高的速度/更低的延迟,但是上面的关键要点仍然是一样的,即使在那里……)在
在外汇高速交易基础设施环境中使用ZeroMQ编排的Python&MQL4&AI/ML系统只是一个很小的例子,其中微秒很重要,纳秒在队列中起作用。。。在
希望您对ZeroMQ library的兴趣只会增长&您将受益于这件杰出艺术品的许多其他用途所获得的巨大飞跃,并从酒吧/订阅、配对/配对,REQ/REP形式模式最符合您的MATLAB/Python/*异构多方/多主机项目的通信需求。在
敬请期待您的时间和努力
相关问题 更多 >
编程相关推荐