子线程定时接受客户端的消息,如果10秒没有收到就关闭链接。代码如下:if ngx.now() - time_now > 10 then local bytes, err = wb:send_close() if not bytes then ngx.log(ngx.ERR, "failed to send the close frame: ", err) return end ngx.log(ngx.ERR, "Client has no response during 10 seconds.") return ngx.exit(444)end主线程检查websocket是否关闭,如果是则直接退出(否则会一直读写数据库)。代码如下:if wb.fatal then ngx.log(ngx.ERR, "fatal error already happened: ", err) returnend不幸的是,websocket关闭并不能被捕获到。看到邮件列表里说ob_abort也不是可靠的监听方式,那请问一下如何监听websocket已经断开了呢? --
if ngx.now() - time_now > 10 then local bytes, err = wb:send_close() if not bytes then ngx.log(ngx.ERR, "failed to send the close frame: ", err) return end ngx.log(ngx.ERR, "Client has no response during 10 seconds.") return ngx.exit(444)end
if wb.fatal then ngx.log(ngx.ERR, "fatal error already happened: ", err) returnend