我有一个在后台运行的C++进程,会不时生成一些“事件”,需要由同一台机器上运行的Python进程来处理。
- C++端的代码应尽可能轻量级。
- Python端只需读取数据,不需要写入。
- 实现必须是跨平台的。
- 发送的数据非常简单。
我的选择有哪些?
谢谢
我有一个在后台运行的C++进程,会不时生成一些“事件”,需要由同一台机器上运行的Python进程来处理。
我的选择有哪些?
谢谢
zeromq -- 没有其他东西。将消息作为字符串进行编码。
但是,如果您想使用库来获取序列化,则可以使用protobuf。它将为Python和C++生成类。您可以在两端使用SerializeToString()和ParseFromString()函数,然后通过ZeroMq传输字符串。
问题解决了,我怀疑没有其他解决方案会更快,并且也没有其他解决方案会如此易于布线和简单易懂。
如果要使用特定的系统原语进行rpc,例如Windows上的命名管道和unix上的Unix域套接字,则应查看Boost::ASIO。但是,除非您具有网络背景并且对C++有非常好的理解,否则这将非常耗费时间。
protobuf
仅是序列化方案的解决方案。 - André Caronprotobuf
只是一种用于传输消息本身的可移植序列化库。它似乎没有提供任何远程过程调用(RPC)和进程间通信(IPC)的机制。 - Stefan我会告诉你创建一个DLL来管理两者之间的通信。Python将加载DLL并调用像getData()这样的方法,DLL将反过来与进程通信并获取数据。 那应该不难。 此外,您可以使用XML文件或SQLite数据库或任何数据库来查询数据。守护程序将更新DB,Python将继续查询。可能会有一个字段指示DB中的数据是否已由守护程序更新,然后Python将查询。 当然,这取决于性能和准确性因素!