zoo_async 操作的功能
Functionality of zoo_async operation
Zookeeper API 包含一个名为 zoo_async() 的操作。文档说给定的操作用于
Flush the leader Channel
有人可以解释一下这个操作的功能并提出一些我们可能需要使用这个操作的用例吗?
此函数的代码在 zookeeper.c 中。我们可以看到它正在向 ZooKeeper 服务器发送 SyncRequest
:
struct SyncRequest req;
这意味着C客户端API中的zoo_async
等同于Java客户端API中的sync
。
调用该方法可以保证客户端对ZooKeeper状态的看法完全赶上服务器端的看法。这种方法在实践中很少使用。大多数 ZooKeeper 使用模式不需要它。 Consistency Guarantees 上的 Apache ZooKeeper 文档进一步讨论了同时一致的跨客户端视图问题以及如何将 sync
方法应用于该问题。
您可能想知道 C API 中的 async
和 Java API 中的 sync
之间的命名不一致。混淆的原因是该操作是在客户端和服务器之间同步状态,但它是异步执行的,客户端在完成时接收回调。因此,它是一个"asynchronous synchronization"。似乎 C API 中的命名选择强调函数的异步性质,而 Java API 中的命名选择强调执行的操作。
Zookeeper API 包含一个名为 zoo_async() 的操作。文档说给定的操作用于
Flush the leader Channel
有人可以解释一下这个操作的功能并提出一些我们可能需要使用这个操作的用例吗?
此函数的代码在 zookeeper.c 中。我们可以看到它正在向 ZooKeeper 服务器发送 SyncRequest
:
struct SyncRequest req;
这意味着C客户端API中的zoo_async
等同于Java客户端API中的sync
。
调用该方法可以保证客户端对ZooKeeper状态的看法完全赶上服务器端的看法。这种方法在实践中很少使用。大多数 ZooKeeper 使用模式不需要它。 Consistency Guarantees 上的 Apache ZooKeeper 文档进一步讨论了同时一致的跨客户端视图问题以及如何将 sync
方法应用于该问题。
您可能想知道 C API 中的 async
和 Java API 中的 sync
之间的命名不一致。混淆的原因是该操作是在客户端和服务器之间同步状态,但它是异步执行的,客户端在完成时接收回调。因此,它是一个"asynchronous synchronization"。似乎 C API 中的命名选择强调函数的异步性质,而 Java API 中的命名选择强调执行的操作。