跳到主要内容

发送直接消息

在发送直接消息时,客户端应用程序需要考虑以下因素:

  • 使用 Java RTO、C 或 .NET API 时,是否希望以阻塞或非阻塞模式发送消息。请参阅阻塞和非阻塞网络 I/O。
  • 每次发送调用要发布的消息数量。请参阅逐条发送消息或批量发送消息。
  • 是否希望发送需要接收方回复的消息。请参阅发布需要回复的消息。

相关示例

有关如何发布和接收直接消息的示例,请参考 Java RTO、C 和 .NET API 的 DirectPubSub 示例,以及 JavaScript 和 Node.js API 的 TopicSubscriberTopicPublisher 示例。

阻塞和非阻塞网络I/O

Java RTO、C 和 .NET API 可以使用阻塞或非阻塞网络 I/O 模式进行发送操作。这由发送阻塞会话属性控制。默认情况下,该属性设置为 true,即使用阻塞模式。

当发送阻塞会话属性设置为 false 时,使用非阻塞模式。如果操作系统/网络无法在不阻塞调用线程(直到有更多缓冲区空间可用)的情况下发送完整消息,客户端应用程序将收到 WOULD_BLOCK 返回码。当收到 WOULD_BLOCK 返回码时,消息未发送,客户端应用程序必须等待 CAN_SEND 会话事件,该事件表明网络已准备好进行发送。

逐条发送消息

要通过 API 调用发布单条消息,请调用以下列出的发送方法或函数之一。

PubSub+ 消息 API使用方法
Java RTOSessionHandle.send(...)
CsolClient_session_sendMsg(...)
.NETISession.Send(...)
JavaScript 和 Node.jssolace.Session.send(...)

如何发布消息

批量发送消息

可以通过单次 API 调用发送一组直接消息。这允许以批量或向量形式发送消息。要发送的消息指定为一个数组;每次调用最多可以发送五十条消息。

在批量发送消息时,应为所有消息设置直接传输模式(参见传输模式)。

Java RTO、C 和 .NET API

使用 Java RTO、C 或 .NET API 时,必须传递一个消息数组。消息目标不是通过发送方法设置的,而是作为每条消息的属性设置的。

如果通过会话属性将会话配置为阻塞模式,则调用将阻塞,直到消息 API 可以接受所有消息。如果配置为非阻塞模式,并且 API 无法接受所有要发布的消息,则返回 SOLCLIENT_WOULD_BLOCK,并且已接受的消息数量将通过 in_out_howManySentnumberOfMessagesWrittenmessagesSent 参数返回。应用程序可以选择重新尝试发送未被接受的消息,或者采取其他操作。

PubSub+ 消息 API使用方法
Java RTOSessionHandle.send(...)
CsolClient_session_sendMultipleMsg(...)
.NETISession.Send(...)
JavaScript 和 Node.js不支持

如何发布一组消息

相关示例

有关如何发布一组消息的示例,请参考适用于相应消息 API 的 PerfTest 示例。