By default the underlying ngx_lua module does error logging when socket errors happen. If you are already doing proper error handling in your own Lua code, then you are recommended to disable this automatic error logging by turning off ngx_lua's lua_socket_log_errors directive, that is,
lua_socket_log_errors off;
Back to TOC
hi,各位我们现在有一个应用场景,需要订阅 redis 的广播,目前已经实现了,用的是类似于: local ok,err = red:subscribe(key,guid()) if not ok then return err end local flag = true while flag do local res,err = red:read_reply() if err then ; else if res[1] == "message" then local obj = cjson.decode(res[3]) flag = func(obj.msg) end end end这种形式,目前看功能上是 OK 的,但是有一个问题,就err-log 里一直会报 tcp 超时错误,请如如何可以将关掉
Hi,
是跑在 init_by_worker 这个生命周期里的
但是目前来看,还是有 timeout 超时
发件人: "openresty@googlegroups.com" <openresty@googlegroups.com> 代表 朱大仙儿 <zhuh...@tvmining.com> 答复: "openresty@googlegroups.com" <openresty@googlegroups.com> 日期: 2018年12月12日 星期三 上午11:29 收件人: openresty <openresty@googlegroups.com> 主题: Re:[openresty] Re: 如何关掉 redis 里的 timeout
顺便问一下,你这个lua的服务跑在哪,可以一直监听订阅
nginx lua 如何启动一个服务,一直运行
------------------
------------------ Original ------------------
From: "老拐瘦&拐爷"<gey...@gmail.com>;
Date: Tue, Dec 11, 2018 09:06 PM
To: "openresty"<openresty@googlegroups.com>;
Subject: [openresty] Re: 如何关掉 redis 里的 timeout
已经找到了。
在 2018年12月11日星期二 UTC+8下午8:59:34,老拐瘦&拐爷写道:
hi,各位 我们现在有一个应用场景,需要订阅 redis 的广播,目前已经实现了,用的是类似于: local ok,err = red:subscribe(key,guid()) if not ok then return err end local flag = true while flag do local res,err = red:read_reply() if err then ; else if res[1] == "message" then local obj = cjson.decode(res[3]) flag = func(obj.msg) end end end 这种形式,目前看功能上是 OK 的,但是有一个问题,就err-log 里一直会报 tcp 超时错误,请如如何可以将关掉
hi,各位
我们现在有一个应用场景,需要订阅 redis 的广播,目前已经实现了,用的是类似于:
local ok,err = red:subscribe(key,guid())
if not ok then
return err
end
local flag = true
while flag do
local res,err = red:read_reply()
if err then
;
else
if res[1] == "message" then
local obj = cjson.decode(res[3])
flag = func(obj.msg)
这种形式,目前看功能上是 OK 的,但是有一个问题,就err-log 里一直会报 tcp 超时错误,请如如何可以将关掉
-- --
哦,不,我是用了一个协程来进行处理的
类似代码如下:
function M:subscribe(key,func)
local co = coroutine.create(function()
local red = get_con(self)
end)
coroutine.resume(co)
发件人: "openresty@googlegroups.com" <openresty@googlegroups.com> 代表 tokers <zcha...@gmail.com> 答复: "openresty@googlegroups.com" <openresty@googlegroups.com> 日期: 2018年12月12日 星期三 下午1:41 收件人: openresty <openresty@googlegroups.com> 主题: Re: [openresty] Re: 如何关掉 redis 里的 timeout
Hello!
目前你可能只能通过手动判断超时情况然后主动再次去 subscribe 了。
另外你说在 init_by_worker,应该是启用了一个定时器的吧,
最好控制下这个定时器的存活时间,定时器一直不退出意味着相关内存得不到机会释放。
这个是当 redis 里面有事件时就调用了啊。。。。
发件人: "openresty@googlegroups.com" <openresty@googlegroups.com> 代表 朱大仙儿 <zhuh...@tvmining.com> 答复: "openresty@googlegroups.com" <openresty@googlegroups.com> 日期: 2018年12月12日 星期三 下午2:10 收件人: openresty <openresty@googlegroups.com> 主题: Re: [openresty] Re: 如何关掉 redis 里的 timeout
那你这个函数,谁来调用它呢?如果是在路由里,得client访问 /abc/def这样吧,至少有人访问一次,才能触发启动这个协程
你们是怎么让nginx触发启动的
function M:subscribe
From: "葛 云飞"<gey...@gmail.com>;
Date: Wed, Dec 12, 2018 01:43 PM
To: "openresty@googlegroups.com"<openresty@googlegroups.com>;
Subject: Re: [openresty] Re: 如何关掉 redis 里的 timeout
我直接在init-by-worker 里启动这个协程的
不需要有外部服务触发
发件人: "openresty@googlegroups.com" <openresty@googlegroups.com> 代表 朱大仙儿 <zhuh...@tvmining.com> 答复: "openresty@googlegroups.com" <openresty@googlegroups.com> 日期: 2018年12月12日 星期三 下午2:39 收件人: openresty <openresty@googlegroups.com> 主题: Re: [openresty] Re: 如何关掉 redis 里的 timeout
目前 这个 超时还是关不掉。。。
你理解错我说的了,redis有事件pub后,你的程序是可以sub到消息。关键是你这个sub的服务从哪里启动呢,你用了一个协程来跑,那谁来调用这个协程的函数呢
Date: Wed, Dec 12, 2018 02:32 PM
顺便问一下,你这个lua的服务跑在哪,可以一直监听订阅nginx lua 如何启动一个服务,一直运行------------------ ------------------ Original ------------------From: "老拐瘦&拐爷"<geyu...@gmail.com>;Date: Tue, Dec 11, 2018 09:06 PMTo: "openresty"<open...@googlegroups.com>; Subject: [openresty] Re: 如何关掉 redis 里的 timeout 已经找到了。 Automatic Error LoggingBy default the underlying ngx_lua module does error logging when socket errors happen. If you are already doing proper error handling in your own Lua code, then you are recommended to disable this automatic error logging by turning off ngx_lua's lua_socket_log_errors directive, that is, lua_socket_log_errors off;Back to TOC在 2018年12月11日星期二 UTC+8下午8:59:34,老拐瘦&拐爷写道:hi,各位我们现在有一个应用场景,需要订阅 redis 的广播,目前已经实现了,用的是类似于: local ok,err = red:subscribe(key,guid()) if not ok then return err end local flag = true while flag do local res,err = red:read_reply() if err then ; else if res[1] == "message" then local obj = cjson.decode(res[3]) flag = func(obj.msg) end end end这种形式,目前看功能上是 OK 的,但是有一个问题,就err-log 里一直会报 tcp 超时错误,请如如何可以将关掉 --