LoginSignup
55
52

More than 5 years have passed since last update.

UNIXドメインソケットを試す

Last updated at Posted at 2014-04-19

c04f1b7fd932ac123a30c2c95e55f5b6.gif

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のような感じで情報が取れる

55
52
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
55
52