【问题标题】:Communication between 2 Services running on same system using C++使用 C++ 在同一系统上运行的 2 个服务之间的通信
【发布时间】:2018-06-05 08:18:52
【问题描述】:

在 C++ 中,我有 2 个在系统上运行的服务(比如 Windows 服务)。显然两者都有对应的 EXE A.EXe & B.EXE。

如果我想在这 2 个 Windows 服务之间查询和接收一些数据,它可以通过从 1 个服务传递一个结构的指针作为函数调用来完成,并让另一个服务使用传递的指针填充该结构。

A 和 B 的通用头文件:

struct Abc
    {
       int a;
    }

现在说服务 A 通过调用服务 B.EXE 中的函数来发送此结构对象及其指针或通过引用传递。此函数调用是否可以跨 2 个服务工作?数据可以通过这种方式在 A 和 B 之间传输吗?

或者我需要像套接字这样的 IPC 机制吗?

实现 2 个服务之间的数据传输的最佳方式是什么 在同一系统上运行

【问题讨论】:

  • 看一下Boost asio聊天服务器的例子,它支持通过socket进行双工通信。
  • 如果您希望此通信作为函数调用进行,您可以尝试远程过程调用。当您使用 Windows 和 VS 时,请查看Introduction to RPC - Part 1 和第 2 部分以获得很好的介绍。

标签: c++ c++11 visual-c++ service ipc


【解决方案1】:

IPC 代表“进程间通信”。您有两个服务(每个都在自己的进程中运行)并且您希望在它们之间进行通信。您绝对需要 IPC 机制。

您的选择是:

  • 套接字(在顶部分层 boos::asio 是个好主意)
  • 共享内存映射和信号事件(不要忘记使用互斥锁或类似的,不要忘记建立锁层次结构,以免出现死锁)。这将仅限于一台机器,但这是可以接受的。
  • DCOM(仅限 Windows,但您似乎仍然受限于 Windows)。
  • 其他一些 IPC 包。

我个人的偏好是套接字,但它们中的任何一个都可能是合适的。

【讨论】:

  • 谢谢。我的问题中也提出了一些澄清,1)是否不可能从一项服务到另一项服务进行函数调用? 2)指针可以在两个服务(进程)之间传递吗?我认为这两个问题的答案是否定的。
  • DCOM(可能还有其他包)会让您看起来好像正在从一个服务到另一个服务进行函数调用,但实际上所有参数都是序列化的,从一个进程复制到 anthor,经过处理,然后将所有内容复制回来。你不能从另一个进程中调用一个进程中的函数。
猜你喜欢
  • 1970-01-01
  • 2010-09-29
  • 2019-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-19
  • 2015-07-23
  • 2021-04-23
相关资源
最近更新 更多