stream 模块自定义协议的长链接

52 views
Skip to first unread message

Xudong Wang

unread,
Sep 22, 2021, 4:36:24 AM9/22/21
to openresty
server 端配置:
stream {
    server {
         listen 8000;
         lua_socket_keepalive_timeout 60s;

         content_by_lua_block {
              local sock = assert(ngx.req.socket(true))
              local data = sock:receive(360)
              ngx.print("\x01\x01\x00\x00\x00\x3f\x02\x01\x00\x00\x00\x3f")
              sock:settimeout(2 * 1000)
         }
    }
}

客户端也是 openresty,在 do_access 阶段发送 360 字节数据,之后调用 setkeepalive 也无报错。

Screen Shot 2021-09-22 at 16.35.03.png

抓包看到每次 server print 后主动发送 FIN 断开链接(8000 -> 4xxxx 端口的 FIN ACK),如何在使用 stream 时保持 1 分钟长链接呢?

kurapi...@gmail.com

unread,
Sep 25, 2021, 2:44:11 AM9/25/21
to openresty
setkeepalive 用于将socket对象放回连接池,等待复用,需要保持连接用 tcpsock:settimeouts(connect_timeout, send_timeout, read_timeout) 调整timeout时间好些
Reply all
Reply to author
Forward
Message has been deleted
0 new messages