sinatraにSocketIOっぽいwebsocket/comet機能を追加できるプラグインを作っている。
今日はcometの負荷を軽くした。

shokai/sinatra-rocketio · GitHub


comet、複数回のサーバーへのpushをキューに溜めてまとめて送信するようにした。
cometioのpost_intervalで設定できる

設定例

set :cometio, :timeout => 120, :post_interval => 2
set :websocketio, :port => 8080
set :rocketio, :websocket => true, :comet => true # enable WebSocket and Comet
post_interval => 2 でタメたキューを2秒ごとにサーバーに送る。


websocketは1プロセスで1万5千ぐらい接続できるんだけど、cometが重くて足ひっぱってたのでこれで軽くなったと思う。

例えばこういうコードの時に今まで10回pushされてたけど、10回分まとめてajaxするので軽い。
for(var i = 0; i < 10; i++){
io.push("chat", "hoge("+i+")");
}

sinatra-cometio v0.5.1から有効になってる機能で、sinatra-rocketioとは別のgemなので
bundle updateしてアップデートしてください