Skip to content

Instantly share code, notes, and snippets.

@ytnk531
Created October 21, 2020 00:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ytnk531/9cf98cd662a2d55c37d88c89278d5cc2 to your computer and use it in GitHub Desktop.
Save ytnk531/9cf98cd662a2d55c37d88c89278d5cc2 to your computer and use it in GitHub Desktop.
require 'nio'
selector = NIO::Selector.new
# 1234番ポートでTCPを待ち受ける
server = TCPServer.new('localhost', 1234)
# 標準出力を取得する。常にwriteが可能な口がほしいだけ
stdout = $stdout
# セレクタに登録。
# TCP1234番ポートの読み取りが可能なときを監視
selector.register(server, :r)
# 標準出力への書き込みが可能なとき(いつも)
selector.register(stdout, :w)
loop do
# サーバーが読み取り可能になるか、標準出力が書き込み可能になるまでブロック
selector.select do |monitor|
# monitor.ioで登録したオブジェクト(serverかstdout)を取得する
case monitor.io
when server
socket = monitor.io.accept_nonblock
print socket.read_nonblock(1200).strip
socket.close
when stdout
print '.'
sleep 0.2
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment