11

MVC 3にアプリケーションがあり、それにWebSocket(Cometへのフォールバック付き)を追加したいと考えています。

少し調べてみたところ、Cometの部分は非常に単純で、自分でやりたいと思っています。これらの長寿命のajaxリクエストを処理するために必要なのは、AsyncControllersとかなり単純なjsだけです。

さて、WebSocketの場合、物事が汚れ始めます。いくつかのライブラリを調べましたが、ほとんどの場合、独自のWebサーバー(したがって、別のホストまたはポートが必要)をセットアップし、そこでwsプロトコル要求をリッスンしているようです。これは、たとえばSuperWebSocketの場合です。これは、最初は問題ないように見えましたが、この「私はWebサーバーです」という問題がありました(もちろん、これはまったく問題ありませんが、避けたいと思います)。

それから「PingIt」かそのようなものを見ました、私は今リンクを見つけることができません..、しかし私は別のコンピュータにソースを持っています。これはmvcのエンドポイントで実行されますが、IDisposableオブジェクトを取得し、リフレクターを介してクライアントでレンダリングされるjavascriptピースを作成するなど、処理方法があまり好きではありませんでした。これは非常に汚染されています。彼らのライブラリの名前は、私が本当に興味を持っていないことに加えて、私が望むものに反して多くのライブラリがスローされているように感じました。これは、ページをどのようにレンダリングするかについての私の見解に反します(特に今私はMVCに取り組んでいます。これは、クリーンで目立たないhtmlページをコーディングできることを意味します)。

基本的に私が欲しいのは、エンドポイントを次のようにすることです。

domain.com/rt/comet
domain.com/rt/socket

それよりも

domain.com/rt/comet
domain.com:81/

つまり、どこかにtcplistenerを設定するのではなく、asp.net MVCアプリケーションのコントローラー内のエンドポイントでWebSocket接続を受信する(そしてハンドシェイクや必要な処理を行う)ことは可能ですか?

これは、コメットコードをWebSocketコードに少し近づけるのにも役立ちます

私はコメット/WebSocket全体に真剣に慣れていないので、プロトコルについてはあまり(またはまったく)知りません。コメットを機能させる方法は理解していますが、WebSocketではそれほど多くはありません。その要点を理解するための基本を読んで理解しました。

また:私が求めているものがかなり離れているかどうか私に知らせてください

4

3 に答える 3

18

コメントに同意し、いくつかのリンクを提供するだけです。SignalRはその方法です。

サイト:http ://signalr.net/およびhttp://www.asp.net/signalr

コード:https ://github.com/SignalR/SignalR

Nuget:Install-Package Microsoft.AspNet.SignalR -pre

良い出発点:

クリエイターの1人からのビデオ:http://vimeo.com/43659069 <-[たくさんの情報!]

于 2012-07-11T05:32:48.737 に答える
4

WebSocketに関するこのスレッドの参照ポイントとして、一見したところ、WebSocketは当然の選択のように見えることに注意してください。APIは、単一のTCPソケットを介してブラウザとサーバー間の双方向通信チャネルを提供するように設計されています。これはIETFによって標準化されており、最新のChrome、Firefox、IE、およびOperaブラウザーはWebSocketをサポートしています。HTTPメッセージのオーバーヘッドを削減することにより、帯域幅のオーバーヘッドを最小限に抑えるように設計されています。だから、何が好きではないのですか?

知覚される銀の弾丸のように、物事は必ずしも見た目とは限りません。多くの問題が存在します:

ブラウザのサポート: 2012年6月の時点で、現在使用されているブラウザの47.64%のみが実際にWebSocketをサポートしていますhttp://caniuse.com/websockets-つまり、WebSocketがどれほど優れていても、サポートするには2番目の「フォールバック」ソリューションが必要です。インターネットユーザーの大多数。また、ほとんどの「フォールバック」ソリューションにはFlashが含まれているため、iOSやその他のモバイルデバイスではまだ運が悪いです。

このブログ投稿から実際のWebSocketの詳細を読む:HTML5WebSocketゲートウェイとサーバーはリアルタイムデータプッシュの万能薬ですか

ブラウザサポートの更新: 2019年5月の時点で、現在使用されているブラウザの96.77%が実際にWebSocketをサポートしていますhttp://caniuse.com/websockets

于 2012-07-23T22:22:41.513 に答える
1

少し調べてみたところ、Cometの部分は非常に単純で、自分でやりたいと思っています。これらの長寿命のajaxリクエストを処理するために必要なのは、AsyncControllersとかなり単純なjsだけです。

申し訳ありませんが、それはそれほど簡単ではありません。さまざまなブラウザーはさまざまな方法で動作し、さまざまな手法(XMLHttpRequest、XDomainRequest、ActiveXオブジェクト、Multpart置換、ロングポーリング、ストリーミング)を使用してパフォーマンスを向上させます。このため、そしてこれらのソリューションの定義された仕様がないという事実のために、Cometは単なるハックです。サーバー送信イベント(EventSource API)とWebSocketは、サーバーからクライアントにデータをプッシュする最も効率的で標準化された方法を提供するようにゼロから設計されています。さらに重要なことに、WebSocketはクライアント間のリアルタイムの双方向通信用に設計されています。とサーバー。

さて、WebSocketの場合、物事が汚れ始めます。いくつかのライブラリを調べましたが、ほとんどの場合、独自のWebサーバー(したがって、別のホストまたはポートが必要)をセットアップし、そこでwsプロトコル要求をリッスンしているようです。これは、たとえばSuperWebSocketの場合です。最初は良さそうに見えましたが、この「私はWebサーバーです」という問題がありました(もちろん、これはまったく問題ありませんが、避けたいと思います)。

Windows Server 8は、WebSocketをネイティブにサポートします。それまでは、XSocketsやSuperWebSockets(既に参照済み)などの別の「Webサーバー」を使用する必要があります。AlchemyWebSocketsFleckもあります。

しかし、MicrosoftはSignalRを前進させているので、完全な牽引力を獲得し、標準のASP.NET MVCスタックの一部になる可能性が最も高いです(すでに計画されている可能性がありますが、MSのものでは少し遅れています)。SignalRはWebSocketをサポートしており(またはモジュールを持っています)、ユーザーのブラウザーをサポートするトランスポートメカニズムへのフォールバックを処理します。

セルフホストソリューションの詳細については(.NET / IISオプションがさらにいくつかあります)、これらのセルフホストリアルタイムサービスを確認してください。

何千もの持続的接続を処理するときにIISがどのように拡張されるかを確認することに非常に興味があります。これは、Windows Server 8用に書き直されていますか?ロードバランサーと水平スケールを導入する必要があるまで、どれくらいの時間がかかりますか?それがあなたが心配することに興味があるものでないなら、私はホストされたリアルタイムサービスを見るでしょう。

于 2012-07-11T14:27:33.770 に答える