ruby非ブロックsocketプログラミング--飛信クライアントの経験の総括を書く
最近rubyを使用して飛信クライアントを記述する際、TCPSocketのブロック問題に遭遇し、socketは常に直接停止またはタイムアウトに失敗している.探索を経て、次の方法は非常に効果的で、やっとメールを送ることができました.
require "socket"
class SIPC
def initialize(sipc_addr)
puts sipc_addr #uri = "221.176.31.33:8080"
uri = sipc_addr.split(":")
@socket = TCPSocket.new(uri[0], uri[1].to_i)
end
# send SIP-C request
def request(sip_request)
puts sip_request
@socket.write_nonblock(sip_request)
#@socket.write(sip_request) also works
#select,read_nonblock and rescue is the key
IO.select [@socket]
res = ""
begin
while chunk = @socket.read_nonblock(4096)
res = res + chunk
end
rescue
end
puts res
return res
end
end