鍍金池/ 教程/ Java/ 跨平臺(tái)的庫選擇
LuaCjsonLibrary
抵制使用 module()函數(shù)來定義 Lua 模塊
點(diǎn)號(hào)與冒號(hào)操作符的區(qū)別
跨平臺(tái)的庫選擇
虛變量
pipeline 壓縮請(qǐng)求數(shù)量
灰度發(fā)布
如何安裝火焰圖生成工具
KeepAlive
正則表達(dá)式
稀疏數(shù)組
docker
下標(biāo)從 1 開始
sleep
使用動(dòng)態(tài) DNS 來完成 HTTP 請(qǐng)求
如何定位問題
調(diào)試
局部變量
如何對(duì) nginx lua module 添加新 api
動(dòng)態(tài)限速
變量的共享范圍
請(qǐng)求返回后繼續(xù)執(zhí)行
火焰圖
正確的記錄日志
判斷數(shù)組大小
select+set_keepalive 組合操作引起的數(shù)據(jù)讀寫錯(cuò)誤
ngx.shared.DICT 非隊(duì)列性質(zhì)
API 測試
編碼為 array 還是 object
執(zhí)行階段概念
Json 解析的異常捕獲
性能測試
TIME_WAIT
函數(shù)在調(diào)用代碼前定義
script 壓縮復(fù)雜請(qǐng)求
禁止某些終端訪問
什么時(shí)候使用
c10 k 編程
阻塞操作
單元測試
持續(xù)集成
緩存失效風(fēng)暴
調(diào)用其他 C 函數(shù)動(dòng)態(tài)庫
熱裝載代碼
緩存
Redis 接口的二次封裝(發(fā)布訂閱)
網(wǎng)上有大量對(duì) lua 調(diào)優(yōu)的推薦,我們應(yīng)該如何看待?
Redis 接口的二次封裝
非空判斷

跨平臺(tái)的庫選擇

大家看過上面三個(gè) json 的例子就發(fā)現(xiàn),都是圍繞 cjson 庫的。原因也比較簡單,就是 cjson 是默認(rèn)綁定到 openresty 上的。所以在 linux 環(huán)境下我們也默認(rèn)的使用了他。在 360 天擎項(xiàng)目中, linux 用戶只是很少量的一部分。大部分用戶更多的是 windows 操作系統(tǒng),但 cjson 目前還沒有 windows 版本。所以對(duì)于 windows 用戶,我們只能選擇 dkjson (編解碼效率沒有 cjson 快,優(yōu)勢是純 lua ,完美跨任何平臺(tái))。

并且我們的代碼肯定不會(huì)因?yàn)?win 、 linux 的并存而寫兩套程序。那么我們就必須要把 json 處理部分封裝一下,隱藏系統(tǒng)差異造成的差異化處理。

local _M = { _VERSION = '1.0' }
-- require("ffi").os 獲取系統(tǒng)類型
local json = require(require("ffi").os == "Windows" and "dkjson" or "cjson")

function _M.json_decode( str )
    return json.decode(str)
end
function _M.json_encode( data )
    return json.encode(data)
end

return _M

在我們的應(yīng)用中,對(duì)于操作系統(tǒng)版本差異、操作系統(tǒng)位數(shù)差異、同時(shí)支持不通數(shù)據(jù)庫使用等,幾乎都是使用這個(gè)方法完成的,十分值得推薦。

額外說個(gè)點(diǎn), github 上有個(gè)項(xiàng)目 cloudflare/lua-resty-json,從官方資料上介紹 decode 的速度更快,我們也做了小范圍應(yīng)用。所以上面的 decode json 對(duì)象來源,就可以改成這個(gè)庫。世界總是有新鮮玩意,多了解多發(fā)發(fā)現(xiàn),然后再充實(shí)自己吧。