在 2012年11月15日星期四UTC+8下午3时13分18秒,Simon写道:
> https://github.com/bigplum/nginx-tcp-lua-module
>
> 移植了很多ngx-lua模块的代码,接口和api基本上原封不动抄过来,lua-resty-redis模块可以直接运行。
>
> 简单写了一个redis-proxy测试了下性能,单进程处理能力总体上约比redis降低了60%左右,不过nginx强在有多进程,做redis
> sharding还是没问题。想来做mysql-proxy应该也没问题。
>
> 移植过程还是挺happy的,很多代码拷贝过来改改就能用,哈哈
Simon,你好。
最近在使用这个模块,我想问,tcp{}能与http{}共用全局变量么?或者http{}可以包含tcp{}么?如果能,我感觉会更方便点。
我的应用场景如下:
1、nginx接收来自浏览器端的请求(HTTP{})
2、nginx根据请求向后台服务器(TCP socket访问)询问
3、整合后台服务器回复,然后回给浏览器
遇到的问题是,tcp纯socket访问,tcp-lua-module有基本功能,但是没办法与http域共享全局变量和require()模块。
我的配置是这样的:摘自nginx.conf
tcp {
server {
listen 5555;
server_name localhost;
timeout 3s;
process_by_lua '
require("LuaXml")
local sock = ngx.req.socket()
while true do
sock:settimeout(3000)
local line, status = sock:receiveuntil("123456")
if not line then
ngx.say("failed to read a line: ", err)
return
end
local data, err, partial = line()
if not data then
ngx.say("-------------")
return
end
--parser xml data
...
end
';
}
}
http {
include mime.types;
#default_type application/octet-stream;
default_type text/plain;
...
init_by_lua ' g_pubtable = {} g_livetable = {} g_target = {} require("LuaXml") g_sort = require("table_sort")';
server {
listen 80;
server_name localhost;
#proxy pass to target server
location /query {
}
}
}
如何在tcp{}中访问到http{}定义的全局变量,如g_pubtable