这是一个关于软件设计的一般“菜鸟”问题,所以如果它看起来含糊不清,我深表歉意,但我真的很感激你的建议。请注意,下面描述的系统纯粹是一个示例,而不是我想到的特定产品。
我经常需要结合使用不同语言编写的多个库或实用程序的功能。例如,如果我想为桌面编写一个高性能的音频处理应用程序,我会用 C/C++ 编写它。然后,我想添加一个漂亮的 GUI。但我不想学习Qt。我喜欢 Adobe Air 的外观和感觉,并希望使用它。后来,我需要访问一个 USB 设备。但是我拥有的 USB 库只有一个 Java 的 API。我如何将所有这些元素结合在一起,以利用它们的相对优势?
显然,我无法将这些不同的元素编译成一个可执行文件。所以我需要分别创建和运行它们,并为它们提供交流的方式。最常见的方法似乎是使用 IPC(进程间通信),例如共享内存或套接字。我更喜欢套接字的想法,因为这些程序可能会在网络上的不同机器上运行。
所以我决定创建一个本地客户端/服务器系统,使用自定义 API,以允许这些元素进行通信。例如,Air 应用程序将收到来自 C 应用程序的消息,告诉它更新它的 UI。在 Java 中运行的 USB 应用程序将使用套接字将音频从 USB 硬件流式传输到 C 应用程序中。
我的问题:以这种方式使用本地套接字是设计这种系统的典型方式吗?性能会比真正的原生应用程序(例如 Java 或 C 中的所有内容,在单个可执行文件中)差很多吗?这种方法似乎也很可能容易出现错误,并且难以维护?
我经常发现自己遇到了现有软件库的限制(例如,具有漂亮、灵活的 UI 但无法访问低级硬件的图形库,或者可以混合许多音频流但不支持的媒体库视频播放),并发现它非常令人沮丧。如果有人能建议像这样组合任意软件库的最佳方法,我将不胜感激。
提前致谢!