【问题标题】:InterProcess Communication Factory (Design Advice)进程间通信工厂(设计建议)
【发布时间】:2013-02-21 14:39:25
【问题描述】:

我有一个解决方案,其中包含许多单独的 EXE,这些 EXE 需要能够彼此来回发送消息。现在每个 EXE 都必须预先了解彼此,并且他们使用 IPC 进行通信,但我真的想要一个更优雅的解决方案。

我想要一个工厂,其中每个 EXE 都可以将自己注册为端点,并且任何 EXE 都可以去工厂并检索所有已注册端点的列表,这样他就可以将目标消息发送到他当时需要与之交谈的应用程序,而不必事先了解所有谈话过程的所有细节。

我已经制定了工厂 DLL,但我不知道如何使它成为一个全局实例,这是一个在解决方案中所有正在运行的 EXE 之间共享的工厂实例。有人告诉我通过 NT 服务、全局程序集缓存使用 WCF,甚至告诉我在 allUsers AppData 中维护一个包含序列化端点的 XML 文件。我尚未研究这些选项,但我计划在接下来的几天内开始研究它们。

我想知道这里是否有人可以推荐一个简单、优雅和常识性的建议来完成我需要做的事情(在许多正在运行的进程之间共享一个实例工厂)

【问题讨论】:

    标签: ipc remoting factory gac


    【解决方案1】:

    DLL 本身被加载到每个 EXE 的地址空间中。但是,您可以在 DLL 中声明共享内存块,或直接使用 Windows API 使用内存映射文件。通过这种方式,您可以获得一块内存,可以同时从多个 EXE(或从加载到多个 EXE 中的同一个 DLL)访问该内存块。您将需要一个互斥锁来防止并发写入内存块。就这样。

    并且忘记 WCF 和其他复杂的任务 - 提供这些建议的人通常不太了解 IPC 和系统 API,只推荐他们知道的东西。

    【讨论】:

    • 谢谢先生。我现在正在研究 kernel32.dll::OpenFileMapping、CreateFileMapping、MapViewOfFile 等。
    猜你喜欢
    • 1970-01-01
    • 2010-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多