缓存、刷新与Ping
出于性能考虑,大多数(如果不是全部的话)客户端库都会缓冲传出的数据,以便一次性将较大的数据块写入网络。这可能只是一个简单的字节缓冲区,用于存储几条消息,然后再一次性推送到网络。
这些缓冲区不会永久保存消息,通常它们被设计为在高吞吐量场景下保存消息,同时在低吞吐量情况下仍能提供良好的延迟。
确保消息以高性能方式流动是客户端库的责任。但在某些情况下,应用程序可能需要知道某条消息是否已经“到达网络”。在这种情况下,应用程序可以使用刷新(flush)调用来通知库将数据通过系统传输。
{% tabs %} {% tab title="Go" %}
{% endtab %}
{% tab title="Java" %}
{% endtab %}
{% tab title="JavaScript" %}
{% endtab %}
{% tab title="Python" %}
{% endtab %}
{% tab title="C#" %}
{% endtab %}
{% tab title="Ruby" %}
{% endtab %}
{% tab title="C" %}
{% endtab %} {% endtabs %}
刷新与Ping/Pong
许多客户端库使用 NATS 协议内置的 PING/PONG 交互 来确保 flush 能够将所有缓冲的消息推送到服务器。当应用程序调用 flush 时,大多数库会在传出的消息队列中放置一个 PING,并等待服务器以 PONG 响应,然后才表示 flush 成功。
尽管客户端可能会使用 PING/PONG 来实现 flush,但这种方式发送的 ping 不计入 最大出站 ping 数。
