Zookeeper C 回调函数
介紹一下 Zookeeper C API 中的各種回調(diào)函數(shù)的原型:
監(jiān)視函數(shù)(watch function)原型
typedef void (*watcher_fn)(zhandle_t *zh, int type, int state, const char *path,void *watcherCtx);?監(jiān)視函數(shù)原型的各個參數(shù)解釋如下:
| zh | zookeeper 句柄(handle) | 
| type | 事件類型(event type). *_EVENT 常量之一. | 
| state | 連接狀態(tài)(connection state). 狀態(tài)值為 *_STATE 常量之一. | 
| path | 觸發(fā)監(jiān)視事件的 znode 節(jié)點的路徑,若為 NULL,則事件類型為 ZOO_SESSION_EVENT | 
| watcherCtx | 監(jiān)視器上下文(watcher context). | 
其他回調(diào)函數(shù)的原型
Zookeeper 中還有幾種在異步 API(一般以 zoo_a*開頭的函數(shù)) 中使用的回調(diào)函數(shù),根據(jù)回調(diào)函數(shù)處理異步函數(shù)返回值類型的不同分為以下幾類:處理返回 void 類型的回調(diào)函數(shù),處理返回 Stat 結(jié)構(gòu)的回調(diào)函數(shù),處理返回字符串的回調(diào)函數(shù),處理返回數(shù)據(jù)的回調(diào)函數(shù),處理返回字符串列表(a list of string)的回調(diào)函數(shù),同時處理返回字符串列表(a list of string)和 Stat 結(jié)構(gòu)的回調(diào)函數(shù),以及處理返回 ACL 信息的回調(diào)函數(shù),它們分別如下:
// 處理返回 void 類型的回調(diào)函數(shù) typedef void(* void_completion_t)(int rc, const void *data);// 處理返回 Stat 結(jié)構(gòu)的回調(diào)函數(shù) typedef void(* stat_completion_t)(int rc, const struct Stat *stat, const void *data); // 處理返回字符串的回調(diào)函數(shù) typedef void(* string_completion_t)(int rc, const char *value, const void *data); // 處理返回數(shù)據(jù)的回調(diào)函數(shù) typedef void(* data_completion_t)(int rc, const char *value, int value_len, const struct Stat *stat, const void *data); // 處理返回字符串列表(a list of string)的回調(diào)函數(shù) typedef void(* strings_completion_t)(int rc, const struct String_vector *strings, const void *data); // 同時處理返回字符串列表(a list of string)和 Stat 結(jié)構(gòu)的回調(diào)函數(shù) typedef void(* strings_stat_completion_t)(int rc, const struct String_vector *strings, const struct Stat *stat, const void *data); // 處理以及返回 ACL 信息的回調(diào)函數(shù) typedef void(* acl_completion_t)(int rc, struct ACL_vector *acl, struct Stat *stat, const void *data);?下面一一介紹上述幾種回調(diào)函數(shù)的用法:
- 處理返回 void 類型的回調(diào)函數(shù)
該回調(diào)函數(shù)一般在異步 API 調(diào)用結(jié)束或 Zookeeper? 客戶端失去連接時被調(diào)用。
| rc | 異步函數(shù)調(diào)用返回的錯誤碼,連接丟失/超時將觸發(fā)該原型函數(shù)(此處指具有該函數(shù)原型的回調(diào)函數(shù),下同)的調(diào)用,并且錯誤碼為 ZCONNECTIONLOSS --? Zookeeper 客戶端與服務(wù)器端的連接丟失,或者 ZOPERATIONTIMEOUT -- 連接超時;而與數(shù)據(jù)相關(guān)的事件也會觸發(fā)該原型函數(shù)的調(diào)用,同時置相應(yīng)的錯誤碼,具體見后文(0 代異步函數(shù)調(diào)用成功)? | 
| data | 由調(diào)用者傳入的指針,調(diào)用者可以通過該指針向回調(diào)函數(shù)傳入自定義的參數(shù),開發(fā)人員應(yīng)負責此指針所指向內(nèi)存的釋放。 | 
?
- 處理返回 Stat 結(jié)構(gòu)的回調(diào)函數(shù)
該函數(shù)一般在異步 API 調(diào)用結(jié)束或 Zookeeper? 客戶端失去連接時被調(diào)用。
| rc | 異步函數(shù)調(diào)用返回的錯誤碼,連接丟失/超時將觸發(fā)該原型函數(shù)(此處指具有該函數(shù)原型的回調(diào)函數(shù),下同)的調(diào)用,并且錯誤碼為 ZCONNECTIONLOSS --? Zookeeper 客戶端與服務(wù)器端的連接丟失,或者 ZOPERATIONTIMEOUT -- 連接超時;而與數(shù)據(jù)相關(guān)的事件也會觸發(fā)該原型函數(shù)的調(diào)用,同時置相應(yīng)的錯誤碼,具體見后文(0 代異步函數(shù)調(diào)用成功) | 
| stat | 指向與該 znode 節(jié)點相關(guān)的 Stat 信息,如果返回非 0 值(即異步調(diào)用函數(shù)出錯),stat 所指向的區(qū)域是未定義的,開發(fā)者不負責釋放 stat 所指向的內(nèi)存空間。 | 
| data | 由調(diào)用者傳入的指針,調(diào)用者可以通過該指針向回調(diào)函數(shù)傳入自定義的參數(shù),開發(fā)人員應(yīng)負責此指針所指向內(nèi)存的釋放。 | 
?
- 處理返回字符串的回調(diào)函數(shù)
該函數(shù)一般在異步 API 調(diào)用結(jié)束或 Zookeeper? 客戶端失去連接時被調(diào)用。
| rc | 異步函數(shù)調(diào)用返回的錯誤碼,連接丟失/超時將觸發(fā)該原型函數(shù)(此處指具有該函數(shù)原型的回調(diào)函數(shù),下同)的調(diào)用,并且錯誤碼為 ZCONNECTIONLOSS --? Zookeeper 客戶端與服務(wù)器端的連接丟失,或者 ZOPERATIONTIMEOUT -- 連接超時;而與數(shù)據(jù)相關(guān)的事件也會觸發(fā)該原型函數(shù)的調(diào)用,同時置相應(yīng)的錯誤碼,具體見后文(0 代異步函數(shù)調(diào)用成功) | 
| value | 返回的字符串 | 
| data | 由調(diào)用者傳入的指針,調(diào)用者可以通過該指針向回調(diào)函數(shù)傳入自定義的參數(shù),開發(fā)人員應(yīng)負責此指針所指向內(nèi)存的釋放。 | 
?
- 處理返回數(shù)據(jù)的回調(diào)函數(shù)
該函數(shù)一般在異步 API 調(diào)用結(jié)束或 Zookeeper? 客戶端失去連接時被調(diào)用。
| rc | 異步函數(shù)調(diào)用返回的錯誤碼,連接丟失/超時將觸發(fā)該原型函數(shù)(此處指具有該函數(shù)原型的回調(diào)函數(shù),下同)的調(diào)用,并且錯誤碼為 ZCONNECTIONLOSS --? Zookeeper 客戶端與服務(wù)器端的連接丟失,或者 ZOPERATIONTIMEOUT -- 連接超時;而與數(shù)據(jù)相關(guān)的事件也會觸發(fā)該原型函數(shù)的調(diào)用,同時置相應(yīng)的錯誤碼,具體見后文(0 代異步函數(shù)調(diào)用成功) | 
| value | 異步調(diào)用的返回值,如果返回非 0 值(即異步調(diào)用函數(shù)出錯),value 所指向的區(qū)域是未定義的,開發(fā)者不負責釋放?value?所指向的內(nèi)存空間。 | 
| value_len | 返回 value 數(shù)據(jù)字節(jié)數(shù)(bytes) | 
| stat | 指向與該 znode 節(jié)點相關(guān)的 Stat 信息,如果返回非 0 值(即異步調(diào)用函數(shù)出錯),stat 所指向的區(qū)域是未定義的,開發(fā)者不負責釋放 stat 所指向的內(nèi)存空間。 | 
| data | 由調(diào)用者傳入的指針,調(diào)用者可以通過該指針向回調(diào)函數(shù)傳入自定義的參數(shù),開發(fā)人員應(yīng)負責此指針所指向內(nèi)存的釋放。 | 
?
- 處理返回字符串列表(a list of string)的回調(diào)函數(shù)
該函數(shù)一般在異步 API 調(diào)用結(jié)束或 Zookeeper? 客戶端失去連接時被調(diào)用。
| rc | 異步函數(shù)調(diào)用返回的錯誤碼,連接丟失/超時將觸發(fā)該原型函數(shù)(此處指具有該函數(shù)原型的回調(diào)函數(shù),下同)的調(diào)用,并且錯誤碼為 ZCONNECTIONLOSS --? Zookeeper 客戶端與服務(wù)器端的連接丟失,或者 ZOPERATIONTIMEOUT -- 連接超時;而與數(shù)據(jù)相關(guān)的事件也會觸發(fā)該原型函數(shù)的調(diào)用,同時置相應(yīng)的錯誤碼,具體見后文(0 代異步函數(shù)調(diào)用成功) | 
| strings | 指向包含了某 znode 節(jié)點的所有子節(jié)點名稱列表的結(jié)構(gòu),如果返回非 0 值(即異步調(diào)用函數(shù)出錯),strings 所指向的區(qū)域是未定義的,開發(fā)者不負責釋放?strings?所指向的內(nèi)存空間。 | 
| data | 由調(diào)用者傳入的指針,調(diào)用者可以通過該指針向回調(diào)函數(shù)傳入自定義的參數(shù),開發(fā)人員應(yīng)負責此指針所指向內(nèi)存的釋放。 | 
?
- 同時處理返回字符串列表(a list of string)和 Stat 結(jié)構(gòu)的回調(diào)函數(shù)
該函數(shù)一般在異步 API 調(diào)用結(jié)束或 Zookeeper? 客戶端失去連接時被調(diào)用。
| rc | 異步函數(shù)調(diào)用返回的錯誤碼,連接丟失/超時將觸發(fā)該原型函數(shù)(此處指具有該函數(shù)原型的回調(diào)函數(shù),下同)的調(diào)用,并且錯誤碼為 ZCONNECTIONLOSS --? Zookeeper 客戶端與服務(wù)器端的連接丟失,或者 ZOPERATIONTIMEOUT -- 連接超時;而與數(shù)據(jù)相關(guān)的事件也會觸發(fā)該原型函數(shù)的調(diào)用,同時置相應(yīng)的錯誤碼,具體見后文(0 代異步函數(shù)調(diào)用成功) | 
| strings | 指向包含了某 znode 節(jié)點的所有子節(jié)點名稱列表的結(jié)構(gòu),如果返回非 0 值(即異步調(diào)用函數(shù)出錯),strings 所指向的區(qū)域是未定義的,開發(fā)者不負責釋放?strings?所指向的內(nèi)存空間。 | 
| stat | 指向與該 znode 節(jié)點相關(guān)的 Stat 信息,如果返回非 0 值(即異步調(diào)用函數(shù)出錯),stat 所指向的區(qū)域是未定義的,開發(fā)者不負責釋放 stat 所指向的內(nèi)存空間。 | 
| data | 由調(diào)用者傳入的指針,調(diào)用者可以通過該指針向回調(diào)函數(shù)傳入自定義的參數(shù),開發(fā)人員應(yīng)負責此指針所指向內(nèi)存的釋放。 | 
?
- 處理返回 ACL 信息的回調(diào)函數(shù)
該函數(shù)一般在異步 API 調(diào)用結(jié)束或 Zookeeper? 客戶端失去連接時被調(diào)用。
| rc | 異步函數(shù)調(diào)用返回的錯誤碼,連接丟失/超時將觸發(fā)該原型函數(shù)(此處指具有該函數(shù)原型的回調(diào)函數(shù),下同)的調(diào)用,并且錯誤碼為 ZCONNECTIONLOSS --? Zookeeper 客戶端與服務(wù)器端的連接丟失,或者 ZOPERATIONTIMEOUT -- 連接超時;而與數(shù)據(jù)相關(guān)的事件也會觸發(fā)該原型函數(shù)的調(diào)用,同時置相應(yīng)的錯誤碼,具體見后文(0 代異步函數(shù)調(diào)用成功) | 
| acl | 指向包含某 znode 節(jié)點 ACL 信息的指針,如果返回非 0 值(即異步調(diào)用函數(shù)出錯),acl 所指向的區(qū)域是未定義的,開發(fā)者不負責釋放?acl?所指向的內(nèi)存空間。 | 
| stat | 指向與該 znode 節(jié)點相關(guān)的 Stat 信息,如果返回非 0 值(即異步調(diào)用函數(shù)出錯),stat 所指向的區(qū)域是未定義的,開發(fā)者不負責釋放 stat 所指向的內(nèi)存空間。 | 
| data | 由調(diào)用者傳入的指針,調(diào)用者可以通過該指針向回調(diào)函數(shù)傳入自定義的參數(shù),開發(fā)人員應(yīng)負責此指針所指向內(nèi)存的釋放。 | 
總結(jié)
以上是生活随笔為你收集整理的Zookeeper C 回调函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: code vs 1026 逃跑的拉尔夫
- 下一篇: MongoDB学习笔记——数据库安装及配
