Hi all :
有这样一个场景,浏览器需要和一个服务进行websocket通信,然后浏览器与这个服务之间有两层nginx,我需要做到:浏览器->nginx(第一层)->nginx(第二层)->服务(C++)的通信,当然也包括反向的通信,之间都是websocket的通信方式。
打算使用lua-resty-websocket完成这个场景。在第一层nginx中,需要在lua文件里通过recv_frame获取ws包进行一些简单的业务处理,例如防攻击,代码如下:
config:#############################
location ~/whatever {
proxy_set_header PROXY_IP $x_real_ip;
proxy_set_header CLIENT_IP $x_real_ip;
proxy_set_header clientip $x_real_ip;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_http_version 1.1;
access_by_lua_file brg-lua/ws_chat.lua;
#proxy_pass http://whatever-upstream;
}
ws_chat.lua:#############################
local wb, err = server:new{
timeout = 10000, -- in milliseconds
max_payload_len = 65535,
}
while true do
local data, typ, err = wb:recv_frame();
... --业务处理
--TODO:关于到第二层nginx如何建立连接并进行通信仍存在一些疑问。
}
简单贴了一段测试代码,有几个点不太明白,想请教大家:
1. 这里如果要满足我的场景,我是需要在lua里通过库提供的函数建立到第二层的websocket连接,然后起两个light thread做与第二层nginx的收据收发?有更加简洁的方法吗?比如能不能有办法做到让proxy_pass来完成这种需求?
2. 这里的while(true)循环是否会影响nginx的并发?
THX , :)