跳到主要内容

配置进程间通信

本节讨论了在使用 C 和 Java RTO 消息传递 API 时应考虑的进程间通信(IPC)配置信息。

影响IPC的上下文属性

下表描述了影响 IPC 操作的重要线程模型相关上下文属性。

管理模式描述
C:
SOLCLIENT_CONTEXT_PROP_THREAD_AFFINITY_CPU_LIST
Java RTO:
IPCSupport.CONTEXT_PROPERTIES.THREAD_AFFINITY_CPU_LIST允许控制内部上下文线程的处理器亲和性。亲和性指定为一个字符串,包含代表 CPU 的数字或范围,使用基于 0 的 CPU ID。
空字符串表示未设置亲和性,线程继承主线程的处理器亲和性。默认值为空字符串。
对 Solaris/SunOS 的支持已被弃用,最后一个版本是 v7.23.0(2022 年 9 月发布)。有关详细信息,请参阅产品生命周期策略页面上的 已弃用功能列表
C:
SOLCLIENT_CONTEXT_PROP_IPC_SHM_THREAD_AFFINITY_CPU_LIST
Java RTO:
IPCSupport.CONTEXT_PROPERTIES.IPC_SHM_THREAD_AFFINITY_CPU_LIST控制内部共享内存线程的处理器亲和性。此属性与 SOLCLIENT_CONTEXT_PROP_THREAD_AFFINITY_CPU_LIST 具有相同的语义。
C:
SOLCLIENT_CONTEXT_PROP_IPC_SHM_SPIN
Java RTO:
IPCSupport.CONTEXT_PROPERTIES.IPC_SHM_SPIN控制内部共享内存线程的忙等或阻塞行为。值为 -1 时,线程始终忙等。大于 0 的值设置线程在阻塞前忙等的次数。值为 0 时,表示不忙等直接阻塞。
默认值为 0。

IPC 上下文属性

影响IPC的会话属性

从应用程序的角度来看,单一会话用于所有与对等应用程序的 IPC 连接(包括传入和传出连接)。必须考虑此会话的属性以及它们对提供对等应用程序连接的底层会话的影响。

应特别考虑以下会话属性。

属性对 IPC 的影响
C:
SOLCLIENT_SESSION_PROP_HOST
Java RTO:
SessionHandle.PROPERTIES.HOST使用 IPC 与多个对等方通信时,HOST 属性用于配置用于监听来自对等方的传入连接的主机名或 IP 地址。
此外,如果应用程序不是完全被动的,它还用于配置要创建的对等方连接列表(传出连接)。这允许多点会话创建一系列子会话并建立传出连接。每个主机名或 IP 地址条目必须用分号分隔。一个给定的条目可以有最多四个用分号分隔的主机条目。
C:
SOLCLIENT_SESSION_PROP_PASSWORD
Java RTO:
SessionHandle.PROPERTIES.PASSWORD对于 IPC 连接,此属性被忽略。
C:
SOLCLIENT_SESSION_PROP_SOCKET_SEND_BUF_SIZE
Java RTO:
SessionHandle.PROPERTIES.SOCKET_SEND_BUF_SIZE使用共享内存传输时,此属性允许创建连接的应用程序控制套接字发送缓冲区的大小。
接受传入连接并切换到共享内存的应用程序无法控制缓冲区大小,因为它使用连接发起方创建的共享内存通道。
C:
SOLCLIENT_SESSION_PROP_SOCKET_RCV_BUF_SIZE
Java RTO:
SessionHandle.PROPERTIES.SOCKET_RCV_BUF_SIZE使用共享内存传输时,此属性允许创建连接的应用程序控制套接字接收缓冲区的大小。
接受传入连接并切换到共享内存的应用程序无法控制缓冲区大小,因为它使用连接发起方创建的共享内存通道。
C:
SOLCLIENT_SESSION_PROP_REAPPLY_SUBSCRIPTIONS
Java RTO:
SessionHandle.PROPERTIES.REAPPLY_SUBSCRIPTIONSIPC 应用程序应始终启用此属性。否则,当新的对等方连接时,现有应用程序订阅不会发送到新的对等方,因此新的对等方不会将匹配的流量发送到应用程序。
C:
SOLCLIENT_SESSION_PROP_MULTIPOINT
Java RTO:
IPCSupport.SESSION_PROPERTIES.MULTIPOINT启用此会话属性(默认启用)时,客户端可以创建一个允许有多个底层会话/传输的会话。

影响 IPC 的会话属性

配置传输通道类型

IPC 的传输通道类型通过 HOST 会话属性的语法进行配置。HOST 会话属性的条目应提供协议、主机和端口,指定如下:

[协议:]主机[:端口]

其中:

  • 协议:用于传输通道的协议。有效值为:
    • tcp — 使用 TCP 通道进行应用程序与其对等方之间的通信。如果没有设置协议,则默认使用 tcp
    • shm — 使用共享内存通道进行应用程序与其对等方之间的通信。首先建立 TCP 通道,然后对等方切换到共享内存通道并拆除 TCP 连接。
    • listen — 使会话监听并接受传入的 TCP 连接。建立连接的对等方指示通信是否应继续通过 TCP 或切换到共享内存通信。
  • 主机 — 要连接到或监听传入连接的 IP 地址(或主机名)。
  • 端口 — 用于传出 TCP 连接的端口,或用于监听传入 TCP 连接的端口。仅在使用非自动分配的默认端口号时才需要提供值。(不使用压缩时,默认端口为 55555;使用压缩时,默认端口为 55003。)

示例:

以下示例展示了如何指定传输通道类型。除非另有说明,否则默认使用端口 55555。

  • 192.168.160.28 — 通过 TCP 连接到此 IP 地址
  • tcp:192.168.160.28 — 通过 TCP 连接到此 IP 地址
  • shm:192.168.160.25 — 通过 TCP 连接到此 IP 地址,然后切换到共享内存通信。
  • listen:192.168.160.25:44444 — 在环回 IP 地址上监听传入的 TCP 连接,端口为 44444。传入连接可以指定通信是否应继续通过 TCP 或使用共享内存。

配置与对等应用程序的连接

当多点会话接受新的传入连接,并在内部为新的传输通道创建新的子会话时,子会话的属性从主会话继承。这意味着行为(例如发送是否为阻塞)由应用程序配置的会话控制。

当会话创建传出连接(及其相关的子会话)到 HOST 会话属性中列出的对等方时,每个传出连接的子会话从主会话继承会话属性。

MULTIPOINT 会话属性用于控制会话是否使用单个传输通道,或者是否支持多个底层会话以连接到多个对等应用程序。默认情况下,启用多点会话。

IPC的会话事件

为了允许与多个对等应用程序进行进程间通信,客户端应用程序用于建立与事件代理连接的会话下可以有许多子会话。然而,即使有多个子会话,客户端应用程序也只看到并与单一会话交互,因此它只从该单一会话接收会话事件。

当应用程序连接会话时,当第一个子会话成功连接时,它会收到一个会话启动事件。随着 API 建立更多子会话,不会收到更多的会话启动事件。同样,只有当最后一个子会话不再建立时,应用程序才会收到重新连接或会话关闭事件。

因此,应用程序无法看到也无法查询与对等应用程序的各个 IPC 传输的状态。这种视图类似于应用程序通过事件代理与其他应用程序通信时的视图,而不是直接通过 IPC 与它们通信。