events { worker_connections 1024; } worker_processes 1; error_log logs/error.log error; http { lua_shared_dict http_dict 1m; server { listen 8091; location /udp { content_by_lua_block { local sock, err = ngx.socket.udp() if not sock then ngx.log(ngx.ERR,"UDP socket error",err) ngx.say("UDP socket error",err) ngx.exit(200) return end local http_dict = ngx.shared.http_dict http_dict:set("udp", ngx.var.uri) local ok, err = sock:setpeername("127.0.0.1", 9001) if not ok then ngx.say("connect to stream server error: ", err) return end local bytes, err = sock:send('trigger dgram req') if not bytes then ngx.say("send stream request error: ", err) return end sock:settimeout(100) local data, err = sock:receive() if not data then sock:close() ngx.say("receive stream response error: ", err) return end ngx.say(data) } } location /tcp { content_by_lua_block { local sock, err = ngx.socket.tcp() if not sock then ngx.say("TCP socket error",err) return end local http_dict = ngx.shared.http_dict http_dict:set("tcp", ngx.var.uri) local ok, err = sock:connect("127.0.0.1", 9002) if not ok then ngx.say("connect to stream server error: ", err) return end sock:settimeout(100) local data, err = sock:receive("*a") if not data then sock:close() ngx.say("receive stream response error: ", err) return end ngx.say(data) } } } } stream { lua_shared_dict stream_dict1 1m; lua_shared_dict stream_dict2 1m; server { listen 127.0.0.1:9001 udp; error_log logs/udp.log error; content_by_lua_block { local sock = ngx.req.udp_socket() if not sock then ngx.log(ngx.ERR, "no client udp socket") return end local clients = ngx.shared["http_dict"] local bytes, err = sock:send("udp echo: " .. http_dict:get("udp")) if not bytes then ngx.log(log.ERR,"send stream request error: ", err) return end } } server { listen 127.0.0.1:9002; error_log logs/tcp.log error; content_by_lua_block { local sock = ngx.req.socket(true) if not sock then ngx.log(ngx.ERR, "no client tcp socket") return end local http_dict = ngx.shared["http_dict"] local bytes, err = sock:send("tcp echo: " .. http_dict:get("tcp")) if not bytes then ngx.log(log.ERR,"send stream request error: ", err) return end } } }