LUA如何遍历返回的JSON数据
作者:糖果
代码如下:
function get_json_key(key)
if not key then
return
end
local json_var = client:get(key)
if not json_var then
return
end
local var = json.decode(json_var)
return var
end
function main()
local list = get_json_key("temp_xxx_key")
local tmp_ip = { ip }
local new_flg = true
for key, var in pairs(list) do
if var[1] == ip then
...
LUA FAQ
LUA FAQ
Lua判断空表的正确姿势
Lua中ipair和pair关键字的区别是什么?
Lua的转义符号“%”
Nginx用户权限(文件读写时候应该注意到的问题)
关于 OPENRESTY 的两三事
NGINX配置初始化过程
OPENRESTY 中的简易HTTP加密
NGINX配置初始化过程
nginx解析配置文件,将解析出来得配置存放在ngx_cycle_s的conf_ctx中,conf_ctx是个四级指针,因为保存这些配置需要context,而这些context是有层级关系,最终的配置结构如图:
图片:27767798_1370416906jegE.png
http模块的配置有些复杂,由于server的配置还可以出现在http模块中,同时location的配置可以出现在http模块或者server模块中,所以对于http来说也就是最上面的那个ngx_http_ctx_conf_t有srv_conf和loc_conf是十分有必要的,这两个指针后面的结构体数组保存了在http中的那些server的和location的配置。同样对于每个server来说,不需要单独的main配置了,直接引用main的就可以。每个server必须有自己单独的ngx_http_core_srv_conf_t,来保存当前server块内的配置,这个配置最后会和http的里面的ngx_http_core_srv_conf_t做merge,这个merge是把父server的配置merge到子serve ...
Lua的MongoDB驱动汇总
作者:糖果
较常见的Lua的MongoDB的驱动除了官方提供的MongoRover,还有可Openresty集成的驱动lua-resty-mongol。不过在用ZBStudio调试的时候,设置断点,用lua-resty-mongol操作mongodb的时候,会发生不应该出的异常,在线调试的时候,可以考虑用别的库替代,还有一个是5.2以上使用的luamongo,在云风老师的博客上提过这个驱动,还提到一个纯lua实现的库mongo, 最后一个是云风的作品,下面是5个项目的地址。
1.Resty的驱动,ZBStudio调试有问题(也可能是偶然,后续可再尝试)
https://github.com/bigplum/lua-resty-mongol
2.官方的驱动,不用启动oprensty服务,可单独运行,依赖libbosn和mongoc库。
https://github.com/mongodb-labs/mongorover
3.需要lua5.2以上。
https://github.com ...
关于 OPENRESTY 的两三事
编辑:糖果
基础原理
Nginx 采用的是 master-worker 模型,一个 master 进程管理多个 worker 进程,基本的事件处理都是放在 woker 中,master 负责一些全局初始化,以及对 worker 的管理。
每个 woker 使用一个 LuaVM,当请求被分配到 woker 时,将在这个 LuaVM 里创建一个 coroutine。协程之间数据隔离,每个协程具有独立的全局变量 _G。
关于 LUA_CODE_CACHE
关闭 lua_code_cache 时,require 的处理方式是每次都强制重新加载和解析,也就是说,你对代码的任何修改的效果,都将在上传后立即体现。
开启 lua_code_cache 时,在同一个 LuaVM 中,模块将在首次加载并解析后被缓存,之后再次 require 将直接返回缓存的内容。换句话说,同一 worker 上的所有请求将共享已加载的模块,任意一个请求对于模块属性的修改,都将影响到同一 worker 上的其他请求。
不应使用模块级的局部变量以及模块属性,存放任何请求级的数据。否则在 lua_code_cache 开启时, ...
OPENRESTY 中的简易HTTP加密
需求
速度快;
可逆;
容易实现,不存在语言障碍;
思考
将一个任意内容的字符串作为密钥,从明文中取等长字符串,逐字节将明文和密钥进行异或计算,得到密文。循环处理整个明文,得到完整密文。对密文进行同样的运算即可解密。
算法
local bit = require("bit")
--- 使用密钥对字符串进行加密(解密)
--
-- @param string str 原始字符串(加密后的密文)
-- @param string key 密钥
-- @return string 加密后的密文(原始字符串)
local function encrypt(str, key)
local strBytes = { str:byte(1, #str) }
local keyBytes = { key:byte(1, #key) }
local n, keyLen = 1, #keyBytes
for i = 1, #strBytes do
strBytes[i] = bit.bxor(strBytes[ ...
使用VNC访问VPS的XWindows桌面
作者:糖果
一般的VPS都提供不SSH得登录方式,通过terminal操作服务器, 除了这种方式,还有让VPS拥有XWindows的Desktop操作模式。
在这里概要的总结一下,如何用VNC访问VPS上的Linux桌面系统。
1:首先要给linux安装桌面系统,VPS使用的是CentOS系统。
yum groupinstall "X Window System" "Desktop"
如何不安装这个组件,VNC登陆系统后,看的是黑屏。
2.安装VNC Server服务。
yum install tigervnc-server
使用VNC的客户访问服务器,服务器端必须运行vncserver服务。
A.查看服务是否安装
安装之后,我们使用chkconfig | grep vnc 查看一下服务列表中,是否已经添加了这个服务。
B.启动服务
sudo service vncserver start
C.查看服务是否启动了。
netstat -plunt
5901 5902 6001 这三个端口就是vncserver的监听端口,说明服务已经运行。
D.修 ...
最简单的LUA随机数生成
[code]
math.randomseed(os.time())
for i=1, 5 do
print(math.random())
end
[/code]
Python的List和C++的Vector的对比
作者:糖果
简单的对比了一下Python的List和C的Vector操作,用Python代替C的
注释。
另外推荐一个在线的编译器,codepad.org。
1.定义数据
Python
candyList = ["Red Candy", "Green Candy", "Blue Candy", "Yello Candy"]
C++
vector<string> candyList;
2.增加元素
Python
candyList.append("Append Candy")
candyList.insert(1, "Insert Candy")
candyList.extend(["Extend Candy Front", "Extend Candy Background"])
candyList = candyList + ["Add Candy Front", " ...
Openresty的ngx_http_lua_balancer代码下载
Openresty代码下载,已经替换过了ngx_http_lua_balancer模块:
点击链接下载:


