Skip to content

Instantly share code, notes, and snippets.

@ytnk531

ytnk531/nio.rb

Created Oct 21, 2020
Embed
What would you like to do?
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
You can’t perform that action at this time.