私は2つのスレッドを持つrubyプログラムを書いています。1つは着信UDP接続をリッスンし、もう1つはクライアント側のブラウザーが読み取るWebSocketでブロードキャストします。私はem-websocketgemを使用しています。ただし、UDPリスナースレッドが呼び出されることはなく、コードはWebSocket初期化コード内にとどまっているようです。em-websocketがブロックしているためだと思いますが、それを示唆する情報をオンラインで見つけることができませんでした。それは私の側のエラーですか?私はルビーに少し慣れていないので、自分が間違っていることを理解することができません。
require 'json'
require 'em-websocket'
require 'socket'
socket=nil
text="default"
$x=0
EventMachine.run do
EventMachine::WebSocket.start(:host => "0.0.0.0", :port => 8080) do |ws|
ws.onopen {
ws.send "Hello Client!"
socket=ws
$x=1
}
ws.onmessage { |msg| socket.send "Pong: #{msg}" }
ws.onclose { puts "WebSocket closed" }
end
end
def listen()
puts "listening..."
s = UDPSocket.new
s.bind(nil, 3000)
while 1<2 do
text, sender = s.recvfrom(1024)
puts text
if $x==1 then
socket.send text
end
end
end
t2=Thread.new{listen()}
t2.join