さまざまな言語/プラットフォームでのC10k(問題10,000接続)




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.md



UPD。 ますます多くの人が比較に関わっています; Tornado(Python)のテストが登場しました






UPD。 ベンチマークの2番目のバージョンはこちらです: eric.themoritzfamily.com/websocket-demo-results-v2.html





All Articles