跳到主要内容

创建客户端会话

会话创建一个单一的客户端连接到 Solace PubSub+ 事件代理,用于发送和接收消息。Solace 消息格式(SMF)用于促进客户端和事件代理之间的通信,这种 SMF 通信随后通过单个 TCP 连接封装。 当使用 Solace C API 的进程间通信(IPC)功能时,会话也可以使用共享内存传输;有关更多信息,请参阅配置进程间通信。然而,当使用 iOS 应用程序的 C API 时,共享内存传输和 IPC 功能不可用。 默认情况下,会话是不安全的——在已连接的会话中,客户端和事件代理之间传输的 SMF 数据以纯文本形式传输。然而,也可以建立一个使用传输层安全(TLS)/安全套接字层(SSL)协议的安全会话,以便加密 SMF 数据。有关如何配置特定 TLS/SSL 会话属性和建立安全会话的信息,请参阅创建安全会话。 会话总是在上下文中创建的。客户端应用程序控制是否将一个或多个会话分组到一个处理上下文中。一旦在给定上下文中创建了会话,它就与该单一上下文保持关联,直到被释放。 要创建一个会话,客户端应用程序必须提供以下内容: 会话属性:用于自定义会话的属性。任何未明确提供的会话属性都将设置为默认值。尽管在许多情况下可以使用默认值,但某些客户端和事件代理参数需要客户端提供特定输入,以便建立与事件代理上的消息 VPN 的连接。有关详细信息,请参阅建立连接所需的会话属性。 特定上下文实例:对于 JCSMP,如果您想使用默认上下文之外的上下文,可以在工厂方法中传入一个特定的上下文。 会话事件回调或委托:对于 Java RTO、C 或 .NET API,在创建会话时必须指定会话事件回调或委托。此回调或委托将被调用以处理每个会话事件。有关详细信息,请参阅处理会话事件。 对于 JCSMP,会话事件回调是可选的。 消息接收回调或委托:对于 Java RTO、C 或 .NET API,在创建会话时必须指定消息事件回调或委托。每次通过会话接收到直接消息时,将调用此回调或委托。有关详细信息,请参阅接收直接消息。 对于 JCSMP,直接消息通过 com.solacesystems.jcsmp.Consumer 传递到会话,客户端应用程序在创建会话后获取该消费者。 一旦创建了会话,它必须被连接。对于 JCSMP,显式调用连接是最佳实践;尽管当请求生产者或消费者时,API 将自动尝试连接。对于 Java RTO、C 和 .NET API,您必须使用以下列出的会话连接调用。 PubSub+ 消息 API使用JCSMP- JCSMPFactory.createSession(...)
创建一个会话。

  • JCSMPSession.getMessageConsumer(...)
    注册消息回调。Java RTO- ContextHandle.createSessionForHandle(...)
    创建一个绑定到未绑定 SessionHandle 的会话。CsolClient_session_create(...).NETIContext.CreateSession(...)JavaScript 和 Node.js- solace.SolclientFactory.createSession(...)
    创建一个会话。

  • Session.on(...)
    注册会话事件监听器,例如:用于 MESSAGE 事件。 要创建一个会话 PubSub+ 消息 API使用JCSMPSession.connect()Java RTOSessionHandle.connect()CsolClient_session_connect(...).NETISession.Connect()JavaScript 和 Node.jsSession.connect() 要连接一个会话 PubSub+ 消息 API调用JCSMPSession.closeSession()Java RTO- SessionHandle.disconnect()

  • SessionHandle.destroy()
    销毁会话不是必需的。C- solClient_session_disconnect(...)

  • solClient_session_destroy(...)
    销毁会话不是必需的。.NET- ISession.Disconnect()

  • ISession.Dispose()
    释放会话不是必需的。JavaScript 和 Node.js- Session.disconnect()

  • Session.dispose() 要关闭一个会话 当使用 Java RTO、C、JavaScript、Node.js 或 .NET API 时,调用 destroy 或 dispose 来销毁会话对象不是必需的。如果会话对象未被销毁,您可以在稍后的时间重新连接到它。 当使用 C 或 .NET API 时,如果会话被销毁/释放或执行了全局清理,则与该会话关联的任何缓冲消息将在断开连接之前被丢弃。当上下文被销毁/释放时,与该上下文内每个会话关联的缓冲消息将被丢弃。 当使用 JavaScript 或 Node.js API 时,调用 dispose 会释放与会话关联的所有资源。Solace 建议先调用 disconnect,以便与事件代理进行适当的握手。

相关示例

有关如何创建和连接会话的示例,请参阅 Java、Java RTO、C 和 .NET API 的 DirectPubSub 示例,以及 JavaScript 和 Node.js API 的 TopicPublisher 示例。