WebSocket のミニマムな client/server サンプルをメモ。

サーバサイド

サーバサイドは EM-WebSocket を使った Ruby による実装。送られてきたメッセージを接続済みの clients に送信する。

require 'em-websocket'

conns = Array.new

EM::WebSocket.start(:host => "0.0.0.0", :port => 8080) do |ws|
  ws.onopen do
    puts "Connected"
    ws.send "Connected"
    conns.push(ws) unless conns.index(ws)
  end

  ws.onmessage do |msg|
    puts "Received #{msg}"
    ws.send msg
    conns.each do |conn|
      conn.send(msg) unless conn == ws
    end
  end

  ws.onclose do
    puts "Closed"
    conns.delete(ws)
  end
end

‘em-websocket’ の gem をインストール後、$ ruby server.rb でサーバを起動。

クライアントサイド

適当な html ファイルで次のスクリプトをロードする。

var ws = new WebSocket("ws://localhost:8080");

ws.onclose = function() {
  log("Closed");
};

ws.onopen = function() {
  log('Connected');
  ws.send("Hello");
};

ws.onmessage = function(e) {
  log(e.data);
};

function log(msg) {
  console.log("[log] " + msg);
};