UPD。 ベンチマークの2番目のバージョンはこちらです:
eric.themoritzfamily.com/websocket-demo-results-v2.html
警告 :ベンチマークやコードについて苦情
がある場合は、Githubでベンチマーク
を利用できます。これにより、自分でバグを編集したり、作成者にバグを報告したりできます。
10,000件の接続の問題の詳細:
en.wikipedia.org/wiki/10000_connections problem
Erlang、Go、Haskell(Snap)、Java(Webbit)、Node.js(websocket)、Python(ws4py)は、Webソケット経由の10,000接続の問題にどのように対処できますか?
ベンチマーク中、新しいクライアントはミリ秒ごとに起動します。 1秒ごとに、各クライアントは現在時刻を含むメッセージをサーバーに送信し、サーバーはこのメッセージを送り返します。
実装 | 接続時間(平均) | 遅延(中) | 投稿 | 化合物 | 接続タイムアウト |
---|
アーラン | 865ms | 17ms | 2849294 | 10,000 | 0 |
Haskell(スナップ) | 168ms | 227ms | 1187413 | 4996 | 108 |
Java(Webbit) | 567ms | 835ms | 1028390 | 4637 | 157 |
行く | 284ms | 18503ms | 2398180 | 9775 | 225 |
Node.js(websocket) | 768ms | 42580ms | 1170847 | 5701 | 4299 |
Python(ws4py) | 1561ms | 34889ms | 1052996 | 4792 | 5208 |
PythonとNode.jsの実装は、接続の約半分に落ちました。
GoのパフォーマンスがErlangに違反すると予想されていたにもかかわらず、遅延ははるかに大きく、サーバーは225接続で要求を処理しませんでした。
Java Webbitはダークホースでしたが、最終的にはGo(157の生の接続)よりも優れたパフォーマンスを発揮しました。
最も驚くべきことは、gevent(Python)とnode.jsがそれぞれC1k問題を解決するために実装されたという事実にもかかわらず、5001と4792の接続後に動作を停止したことです。
より詳細な説明、コード、および生データはGithubにあります:
github.com/ericmoritz/wsdemo/blob/master/results.mdUPD。 ますます多くの人が比較に関わっています; Tornado(Python)のテストが登場しました
UPD。 ベンチマークの2番目のバージョンはこちらです:
eric.themoritzfamily.com/websocket-demo-results-v2.html