UNIXドメインソケットは、異なるプロセス間で情報のやり取りを行う方法のひとつ。あるプログラムでファイルのようにして .sockファイル UNIXドメインソケットをどこかに置いておき、もう一方のプログラムでそのファイルに向けて接続すれば、やりとりが行える。試しに使ってみた。
サーバのコード。
server.rb
require 'socket'
time = 0
count = Thread.new do
loop do
time += 1
Thread.pass
sleep 1
end
end
sock = Thread.new do
Socket.unix_server_loop('server.sock') do |sock, addr|
p sock
Thread.new do
loop do
begin
sock.write(time.to_s + "\n")
rescue Errno::EPIPE => e
p e
break
end
Thread.pass
sleep 0.2
end
end
end
end
puts 'server launched!'
count.join
クライアントのコード。
client.rb
require 'socket'
require 'logger'
log = Logger.new(STDOUT) # 時刻をサクッと知りたかったのでLogger使った
UNIXSocket.open('server.sock') do |sock| # .sockファイルに対してopenする
while true
log.info sock.readline.chomp!
end
end
こうすると、トップに貼ったgifのような感じで情報が取れる