C#からUser Streamsに多重接続する時の注意点

User Streams 超便利ですね。これに対応していないTwitterクライアントとか考えられません。

ところで、クライアントの中には複数のアカウントが利用できるものがあります。折角なので、User Streamsは何本も張って使いたいですよね。(事実、TwitterのImplementation Suggestionsにも「複数のアカウントを扱う場合は複数のストリームを扱えるようにせいって書かれてます-> http://dev.twitter.com/pages/user_streams_suggestions )

そこで、何本も張ろうとすると、あることに気づきます。

3本目以降のストリームが必ずタイムアウトする。

これ、バグでもなんでもなく、ただ単にHTTP 1.1の仕様なんです。

Clients that use persistent connections SHOULD limit the number of
simultaneous connections that they maintain to a given server. A
single-user client SHOULD NOT maintain more than 2 connections with
any server or proxy. A proxy SHOULD use up to 2*N connections to
another server or proxy, where N is the number of simultaneously
active users. These guidelines are intended to improve HTTP response
times and avoid congestion.
http://www.ietf.org/rfc/rfc2616.txt

でも、そんなこと言ってる場合じゃないですね。Twitterは別なんです。廃人さんのサティスファクションを得るには、こんな制限そげぶしなければなりません。

で、ちょっと調べると、INTERNET_OPTION_MAX_CONNS_PER_SERVERとかSetInternetOptionsとかレジストリとか出てきて萎えますが、もちろんそんな手段に頼らなくても済みます。

こちらをご覧ください。

http://msdn.microsoft.com/ja-JP/library/system.net.servicepointmanager.defaultconnectionlimit.aspx

ServicePoint オブジェクトで許可される同時接続の最大数を取得または設定します。

まんまですね。

要するに、

ServicePointManger.DefaultConnectionLimit = (同時接続数上限);

をぶち込んでやれば解決です。たぶん、

ServicePointManager.Expect100Continue = false

って書いてるはずなので、その上か下あたりにでも書いとけばいいでしょう。

って感じのトラブルシューティング。たった1行だけど、僕とKrileには大きな進歩だったりします。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です