# ws_server.rb require 'faye/websocket' require 'eventmachine' require 'json' $clients = [] EM.run { server = WEBrick::HTTPServer.new(Port: 8080) server.mount_proc '/ws' do |req, res| if Faye::WebSocket.websocket?(req) ws = Faye::WebSocket.new(req, nil, {ping: 15}) ws.on :open do |event| $clients << ws end ws.on :message do |event| begin data = JSON.parse(event.data) # ユーザーの位置と名前をブロードキャスト $clients.each do |client| next if client == ws client.send(data.to_json) end rescue => e puts "JSON Parse Error: #{e.message}" end end ws.on :close do |event| $clients.delete(ws) ws = nil end # 必須 ws.rack_response else # 普通のHTTPリクエストの処理 res.status = 400 res.body = 'Not WebSocket' end end trap("INT") { server.shutdown } server.start }