2012-04-24 9 views
4

クライアント(デスクトップまたはモバイル)からホストされているサーバーにデータをストリーミングする必要があります。これは大量のデータではなく、1/10秒ごとに1バイトですが、データをすぐにストリーミングする必要があり(バッファリングなし)、接続を長時間(たとえば最大10分)有効にする必要があります。HTTP経由でクライアントからサーバーにデータをストリームすることは可能ですか?

サーバーがホストされているため、私はソケットを使用できません - httpだけです。

私はクライアントに接続していた場合、永続的な接続を使用してこれを行うことができ、応答ストリームに書き込むことができます。

しかし、逆にこれを行う方法はありますか?クライアントがサーバーへの永続的な接続を持ち、要求ストリームに書き込んでいますか?

明確化:私はこのクライアント - >サーバ間の通信は、永続的なHTTP接続として行わ持っている必要はありません ことが可能であったならば、私はちょうどちょうどので、私は私の計画サーバ - との対称性を持つことができ、思っていた>クライアントの永続的HTTP接続。

私が聞いているところでは、個々のHTTP投稿を行い、同じまたは同様のレイテンシを達成できるはずです。

答えて

1
私が先に行くとあるように思わ自分の質問への答えを提供します

それはクライアント - >サーバからの永続的なHTTP接続を行うことは技術的に可能ですが、誰もがまだあるため、それを実装していないです個々のHTTP要求を作成する通常の方法を使用することは、誰にとっても十分に速いと思われます。

これは、WebRequest.CreateとHttpWebRequestクラスを使用し、フレームワークがKeepAliveを処理していることを信頼することで終わったのです。実世界のパフォーマンスはまだ見えますが、私のプロトタイプでは十分に速いと思われます。

+0

実世界では十分に速いですか? – Felix

+0

@nissemand私は非公式にクロスカントリー(米国)をテストしましたが、かなりの応答時間(おそらくサブ250ms)があるようでした - それはクライアント - >サーバー - >別のクライアントでした – PhilChuang

+0

恐らく、これはうまくいくと思いますか?大量のデータに対しては? vdieoと言う? – Felix

0

AFAIK、WCFがIISでホストされている場合、ストリーミングは機能しません。

this CodeProject articleがWCF 4.5で修正されていると判明しました。

クライアントに1/10秒ごとに新しい電話をかけることはできますか? HTTP 1.1を使用している場合は、TCP接続を開いたままにする必要があります。

0

これは良いユースケースかどうかはわかりませんが、SignalRが役立つかもしれません。

+1

私はSignalRのDamian Edwardsと話をしましたが、SignalRはサーバ - >クライアントの永続的接続のみを行うようです。 – PhilChuang

+0

ええ、私はそれが正確であったかどうか確信がありませんでした。 – mgnoonan

1

恐らくWebSocketが有用であろう。 HTTP経由で "ソケット"を作成できるので、HTTP経由でクライアントからサーバーにデータを送信することができます。

関連する問題