web-dev-qa-db-ja.com

HTML5 websockets:オープン接続の最大数?

HTML5 Webソケットは(および しばらくの間 )エレガントなreal-timeサーバー側プッシュ を有効にするホットトピックです。

現在、Tomcat 7.0.30を搭載したWebSocketで動作するアプリケーションがあり、これには websocket support が含まれています。しかし、これを実稼働環境に移行すると、疑問が生じます。

主にbrowsing session;ごとに同時に操作できる(open)可能な接続の最大数を知りたいと思います。 ブラウザセッションは、単一のブラウザタブまたはウィンドウを意味します。

開いているwebsocket接続は、Webサーバーが同時に処理できる接続の最大数になりますか?例えば。 MaxClients Apacheの場合。

逆に、単一のbrowsing sessionのWebSocketの最大数はブラウザ自体によって制限されていますか? ブログ投稿 が示すように、2012年4月まで、さまざまなブラウザーがさまざまな量のopen websocket接続をサポートしています。 (私は個人的にbrowsing sessionにつき1つのオープンWebSocketを目指しますが、この情報はまだ知っておくと良いでしょう)。

TL/DR:

  1. 可能なウェブソケットの量を制限するものは何ですか閲覧セッションごと?クライアントですか?サーバー?または両方の組み合わせ?
  2. ws:接続とwss:接続の両方に同じ制限が適用されますか?
48

ブラウザのmax-connectionsデフォルト値の標準仕様はありません。実装によって異なります[0]。さらに、同じアプリケーションに対してブラウズセッションごとにWebソケット以上を使用すると、pub/subチャネルを使用できるため、やり過ぎに見えます。

接続のボトルネックは通常、サーバー側にあります。 WebソケットはHTTPへのアップグレードであるため、接続は「ちょうど」アップグレードされたHTTP(TCP)接続[1]です。HTTPSとWSSは通常の接続にセキュリティレイヤーを追加するだけです。異なる接続はありません[2]。あなたの場合、maxConnections(およびmaxThreads)[3]およびオペレーティングシステムの最大値[4] [5]。同時接続が数万に達する場合は、ロードバランシングまたはクラスタリングについて考え始める必要があります[6]。

[0] https://code.google.com/p/chromium/issues/detail?id=8532

[1] http://en.wikipedia.org/wiki/WebSocket

[2] http://en.wikipedia.org/wiki/HTTP_Secure

[3] http://Tomcat.Apache.org/Tomcat-7.0-doc/config/http.html

[4] https://serverfault.com/questions/10852/what-limits-the-maximum-number-of-connections-on-a-linux-server

[5] https://superuser.com/questions/251596/is-there-a-hard-limit-of-65536-open-tcp-connections-per-ip-address-on-linux =

[6] http://Tomcat.Apache.org/Tomcat-7.0-doc/config/cluster.html

高同時実行性の詳細: http://www.kegel.com/c10k.html

34
Mardie

Gecko 7では、パラメータnetwork.websocket.max-connectionsを導入しました。about:configで設定できます。これにより、「一度に」最大のWebSocket接続が設定されます。 https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API

コードからこの数を決定できるかどうか、および他のセッションで開いている数(つまり、残りの数)を決定する方法があるかどうかはわかりません。

7
Mat