Python 框架作为"Java + OSGi"组合的替代方案
Python framework as an alternative for "Java + OSGi" combination
我正在考虑Python和C/C++的组合,以取代我们软件体系结构中关于OSGi+Java+JNI+C/C++的原始概念。
我绝对不需要替换Felix或Equinox等OSGi框架的所有功能。
我在Python代码中真正需要的是:
- 应用层模块化的推动者
- 基于组件的应用程序框架
- 服务/组件中央登记处
- 非常轻量级的框架,它将在嵌入式设备上运行(尽管RAM足够大)
你能就这样的Python框架提出建议吗?
我认为OSGi提供的很多功能与Java的体系结构密切相关:它的类加载器和类型安全。实现服务注册表应该不会太难,但用OSGi的准确性来管理它几乎是不可能的。显然,OSGi提供的多命名空间功能在Python中是不起作用的,除非您将模块移动到单独的进程中,这将需要更昂贵的进程间通信来实现模块间通信。您可以从ApacheCelix开始,它是基于本机的,但我对它的实用性也有类似的怀疑,因为本机代码没有提供很多关于其依赖关系的信息。
一个更通用的解决方案是通用OSGi的最初想法。在这个模型中,您可以保持OSGi框架用于部署和管理。但是,您创建的处理程序捆绑包可以映射使用其他语言编写的捆绑包。例如,Python处理程序或C++本机。处理程序将本地服务注册表模型映射到OSGi服务注册表。这非常容易做到,因为OSGi服务注册表是正确的事件。本机处理程序将映射捆绑事件(如启动/停止),以指示操作系统启动/停止本机代码。
Peter已经提到了Apache Celix。也许值得一试。Celix的一部分是远程服务管理(RSA)实现,因此可以在分布式环境中使用它。最终,这种实现还将使与基于Java的OSGi框架进行通信成为可能,从而使Celix+RSA成为JNI的替代方案。这还有一个额外的好处,即本机代码和java代码不共享同一个过程。如果一端遇到问题,另一端仍在运行。
与Celix一致,您也可以看看Native OSGi,这是Celix和一些C++类OSGi框架(CTK插件框架和nOSGi)为实现Native类OSGi而做出的努力。这包括诸如定义良好的API、捆绑包格式、代码共享等
考虑到您的需求,我认为Celix和Native OSGi可能非常适合。
- 运行同一解决方案的另一个项目的项目
- Project Euler问题4的错误解决方案
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 可组合的lambda/std::函数与std::可选
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 混合组合和继承的C++问题
- 我需要将多个函数组合为一个函数
- 计算每个节点的树高,帮助我解释这个代码解决方案
- 构建可组合有向图(扫描仪生成器的汤普森构造算法)
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- visual c++,如何获取解决方案目录中的代码
- 通过组合不同的类型来创建唯一的id
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 模板元编程:如何将参数包组合成新的参数包
- 有没有办法在远程设备上打开和编辑visual Studio 2017解决方案
- 检查向量是否具有所有可能的字符组合
- OpenCV 错误的解决方案:不支持的格式或格式组合 - 当将 ORB 功能与 FlannBasedMatcher 匹配
- 高速解决方案以循环浏览不同变量的所有组合,并使用启动步骤停止方案(C )
- Python 框架作为"Java + OSGi"组合的替代方案
- 比迭代所有组合更简单的解决方案