hi,agentzh:
对于你提供的方法,我搞了测试和研究,但是情况不乐观,我现在还不搞不了那么深入的封装,目前来讲还不能替openresty 做补丁。
我要的只是下面这样的方式:
content_by_lua '
local sock = ngx.socket.udp()
sock:settimeout(5000)
local ok, err = sock:sendto("172.0.0.1", 19999)
if not ok then
ngx.say("failed to send to xxx: ", err)
return
end
local data ,ip , port, err = sock:receivefrom(4096)
if not data then
ngx.say("failed to read a packet: ", data)
return
end
ngx.say("successfully read a packet: ", data)
sock:close()
';
请帮忙看看,能不能封装到openresty 里面去。多谢啦!
Thanks!
行者无疆
On Friday, August 22, 2014 3:38:44 AM UTC+8, agentzh wrote:
Hello!
2014-08-21 1:49 GMT-07:00 行者无疆:
> 进程来回包给调用方。这样的话,对于调用方来说,发包时候调用server的ip,port会是server
> proxy的(比如:192.168.1.10:10001),但是调用方是从worker进程收包的(比如:192.168.1.10:10002)。这种情况我们之前在php
> 和 php 扩展里面是没有问题的。但是当我们使用了 openresty的时候,通过 ngx.socket.udp(),setpeername(),
> send() 发包到(192.168.1.10:10001 ),但是通过 receive() 收不到
> worker进程(192.168.1.10:10002)发过来的包。
如果为 udp cosocket 实现 bind 方法(即 LuaSocket 里的 setsockname() 函数)应当可以满足你这里的需求吧?见
http://w3.impa.br/~diego/software/luasocket/udp.html#setsockname
如果是它的话,那么你有兴趣为 ngx_lua 模块贡献一个小补丁吗?
另外,请先订阅本邮件列表再行发贴,谢谢合作!
Thanks!
-agentzh