cf

2019-04-18 18:43 更新

cf 庫(kù)

cf庫(kù)為作者將底層實(shí)現(xiàn)的一些方法封裝后暴露到用戶(hù)層使用, 請(qǐng)不要隨意嘗試直接導(dǎo)入底層API進(jìn)行使用.

cf庫(kù)的API具體使用方法與后續(xù)產(chǎn)生的變更請(qǐng)?jiān)诖诉M(jìn)行查閱.

cf庫(kù)的導(dǎo)入方式為: local cf = require "cf"

cf.fork(function)

創(chuàng)建一個(gè)由cf管理的協(xié)程, 協(xié)程會(huì)自行啟動(dòng)/結(jié)束/回收.(目前不支持手動(dòng)停止并銷(xiāo)毀, 如有業(yè)務(wù)需要請(qǐng)直接return). 此方法沒(méi)有返回值.

cf.self()

返回當(dāng)前上下文的協(xié)程對(duì)象.

cf.wait(cf_coroutine)

手動(dòng)暫停/讓出當(dāng)前協(xié)程. 返回值由wakeup傳遞

cf.wakeup(cf_coroutine, ...)

手動(dòng)喚醒指定協(xié)程. ...為傳遞給wait的返回值. wakeup本身沒(méi)有返回值

cf.sleep(sleep_time)

將當(dāng)前協(xié)程休眠sleep_time秒后繼續(xù)運(yùn)行. 此方法沒(méi)有返回值.

cf.at(time, func)

創(chuàng)建一個(gè)循環(huán)定時(shí)器每time秒運(yùn)行一次, 并且返回一個(gè)timer對(duì)象.
timer可以使用stop方法停止定時(shí)器, 多次停止是無(wú)害的.

cf.timeout(time, func)

創(chuàng)建一個(gè)定超時(shí)器且運(yùn)行一次, 并且返回一個(gè)timer對(duì)象.
timer可以使用stop方法停止定時(shí)器, 多次停止是無(wú)害的.

cf.resolve(domain, version)

主動(dòng)解析一個(gè)域名, version用來(lái)確認(rèn)需要返回IPv6還是IPv4. 暫未實(shí)現(xiàn)(TODO)

關(guān)于cf封裝的使用注意事項(xiàng)

請(qǐng)不要隨意跨越封裝層進(jìn)行l(wèi)ua或者C的底層API引用.

請(qǐng)不要過(guò)于濫用定時(shí)器相關(guān)API, 請(qǐng)確認(rèn)您是否真的有必要使用.

所有API都是同步非阻塞, 即使是定時(shí)器也同樣會(huì)導(dǎo)致重入問(wèn)題. 關(guān)于重入問(wèn)題需要自行在業(yè)務(wù)層確認(rèn).

fork創(chuàng)建協(xié)程由cf管理, cf內(nèi)部也會(huì)維護(hù)一個(gè)協(xié)程池并且管理協(xié)程的生命周期.
如果一旦您使用相關(guān)手動(dòng)管理API, cf將會(huì)放棄對(duì)該協(xié)程的操作.在該協(xié)程生命周期未結(jié)束之前(return), 將不會(huì)進(jìn)行內(nèi)存釋放. 所以, 您一旦使用相關(guān)API后需要手動(dòng)喚醒或者return.cf僅在協(xié)程執(zhí)行完畢/return后才會(huì)主動(dòng)進(jìn)行相關(guān)資源釋放.

如果您真的有需要直面底層API封裝私有庫(kù), 可以聯(lián)系作者幫助.

以上內(nèi)容是否對(duì)您有幫助:
在線(xiàn)筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)