3

我正在考虑用 Python 和 C/C++ 组合来取代我们 SW 架构中关于 OSGi + Java + JNI + C/C++ 的原始概念。

我绝对不需要替换 Felix 或 Equinox 等 OSGi 框架的所有功能。

我在 Python 代码中真正需要的内容:

  1. 应用层模块化的推动者
  2. 应用程序的基于组件的框架
  3. 服务/组件的中央注册表
  4. 非常轻量级的框架,它将在嵌入式设备上运行(虽然内存足够大)

您能否就这样的 Python 框架提出建议?

4

2 回答 2

3

我认为 OSGi 提供的很多东西都与 Java 的体系结构密切相关:它的类加载器和类型安全。实现服务注册表应该不会太难,但是以 OSGi 的准确性管理它几乎是不可能的。显然,OSGi 提供的多命名空间的强大功能在 Python 中不起作用,除非您将模块移动到单独的进程中,这将需要更昂贵的进程间通信来进行模块间通信。你可以从 Apache Celix 开始,它是基于原生的,但我对它的实用性有类似的怀疑,因为原生代码没有提供很多关于它的依赖关系的信息。

更通用的解决方案是Universal OSGi 的原始想法。在此模型中,您将 OSGi 框架保持原样用于部署和管理。但是,您创建的处理程序包可以映射用其他语言编写的包。例如 Python 处理程序或 C++ 本机。处理程序会将本机服务注册表模型映射到 OSGi 服务注册表。由于 OSGi 服务注册表已正确事件,因此这非常容易做到。本机处理程序将映射捆绑事件(如启动/停止)以指示操作系统启动/停止本机代码。

于 2012-08-29T06:53:15.220 回答
1

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 可能很合适。

于 2012-08-30T06:24:57.730 回答