em-websocketの接続数の上限が1015ぐらいなんだけど増やせた。forkとかは使わない。

環境はUbuntu12.04。
Macはepoll使えないので無理。

まずこちらを参考にファイルディスクリプタの上限を増やしておく。
ファイルディスクリプタの上限値を増やす – そ、そんなことないんだから!


で、EM::runの前にepollを使うようにしてset_descriptor_table_sizeを設定すればおk

require 'eventmachine'
require 'em-websocket'

EM.epoll
EM.set_descriptor_table_size 60000
EM::run
EM::WebSocket.run :host => "0.0.0.0", :port => 8080 do |ws|
## 略
end
end

クライアント側はem-websocket-clientを使って試した。こちらもEventMachine起動前にEM.epollしてEM.set_descriptor_table_sizeしておく必要ある。

1万クライアント接続している状態で、全クライアントに数byteのデータ送るのに0.5秒ぐらいかかった。
14000ぐらいでなんか動きが怪しくなった。

参考:File: EPOLL [EventMachine]


なかなか上のページに辿りつかなかったんだけど、thinの中でem-websocketを使ってる時にthinの–max-connsオプションを増やしたらなぜかwebsocketの方も接続数が増えちゃったので、thinとrackのソース読んで追って行ったらたどり着いた。