从Ruby中的Unix Socket读取/写入

我正在尝试从 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从套接字读取,直到它关闭.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...