加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

从Ruby中的Unix Socket读取/写入

发布时间:2020-12-16 19:24:11 所属栏目:百科 来源:网络整理
导读:我正在尝试从 Ruby的UNIX套接字连接,读取和写入.它是由haproxy使用的统计套接字. 我的代码如下: require 'socket'socket = UNIXSocket.new("/tmp/haproxy.stats.socket")# First attempt: workssocket.puts("show stat")while(line = socket.gets) do puts
我正在尝试从 Ruby的UNIX套接字连接,读取和写入.它是由haproxy使用的统计套接字.

我的代码如下:

require 'socket'
socket = UNIXSocket.new("/tmp/haproxy.stats.socket")

# First attempt: works

socket.puts("show stat")

while(line = socket.gets) do
  puts line
end

# Second attemp: fails

socket.puts("show stat")

while(line = socket.gets) do
  puts line
end

它第一次成功,但第二次尝试失败.我不知道为什么

# pxname,svname,qcur,qmax,scur,smax,slim,stot,bin,bout,dreq,dresp,ereq,econ,eresp,wretr,wredis,status,weight,act,bck,chkfail,chkdown,lastchg,downtime,qlimit,pid,iid,sid,throttle,lbtot,tracked,type,rate,rate_lim,rate_max,check_status,check_code,check_duration,hrsp_1xx,hrsp_2xx,hrsp_3xx,hrsp_4xx,hrsp_5xx,hrsp_other,hanafail,req_rate,req_rate_max,req_tot,cli_abrt,srv_abrt,stats,FRONTEND,2000,OPEN,1,BACKEND,UP,22,legacy_socket,1000,2,all,10000,3,socket_backend,socket,200,DOWN,4,L4CON,5,6,7,21,8,9,10,api_backend,api,L4OK,www_backend,ruby-www,/Users/Olly/Desktop/haproxy_stats.rb:14:in `write': Broken pipe (Errno::EPIPE)
    from /Users/Olly/Desktop/haproxy_stats.rb:14:in `puts'
    from /Users/Olly/Desktop/haproxy_stats.rb:14

问题是什么?有没有很好的参考使用UNIX套接字和Ruby?

解决方法

看起来连接已经在第一个请求之后被关闭.我不认为你做错了什么HAProxy stats socket可能设计为使其响应单个命令,然后关闭连接.

我想你需要重新连接每个请求.

如果你看看this blog post是关于使用HAProxy stats socket与socat,那么这是有道理的,因为你将show stat命令管道到socat,socat从套接字读取,直到它关闭.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读