3

私の問題がゲームプログラミングに関するものではないことを除いて、私はこのトピックを投稿した人と同じジレンマ、WCFとのリアルタイムコミュニケーションを持っています。2つのWindowsアプリケーション(サーバークライアント)間でリアルタイム通信を行うために使用するのに最適な方法を知りたいです。現在、ビジュアルc ++ / c#を使用していますが、サーバーがクライアントに受信しているすべてのフィードをリアルタイムで表示できるようにしたいと考えています。

.NET Remotingの使用を開始しましたが、継続的な調査では、SOAP-httpを使用し、通信速度に影響を与える可能性があるようです。私のサーバーとクライアントはインターネットを使用して通信しますが、ファイアウォールまたはインターネット間で通信する場合、.NETRemotingはTCPチャネルの使用を許可しません。

あなたの入力は大歓迎です。

4

2 に答える 2

2

それはあなたのシナリオに依存すると思います。「リアルタイム」が必要で、UDPの方が優れているプロセスでいくつかのパッケージを失っても構わないと思っている場合は、たとえば、遅いパッケージを回復するまでにビデオ会議ツールを使用してください。ビデオまたはオーディオの次のフレームを移動して表示する必要があります。これはUDPの使用の良い例です。これが、UDPがTCPよりもはるかに高速である理由です。

ただし、メッセージの1ビットを失うことをいとわない場合は、TCPが作成されました。パッケージを失った場合、プロトコルは、メッセージ全体を可能な限り完全にするように再度要求するためです。

さらに、それはコミュニケーションが維持されている方法に依存します、情報は1から多へ、多から多へ、1からトーンへと流れていますか?

NetNamedPipeBindingを例にとると、これははるかに高速なプロセスになりますが、単一のマシンにのみデプロイされ、プロセス全体にデプロイされます。一方、NetMsmqBindingはキューの構築に役立ち、負荷が膨大な数の接続になるシナリオでは、驚くほど信頼性が高く、スケーラブルになります。

結局、それはすべてあなたの具体的なシナリオとあなたのビジネス目標に要約されます。

それが役に立てば幸い

于 2012-11-16T09:18:30.963 に答える
0

独自のメッセージ解析を行う場合は、TcpClient および TcpListener クラスで標準の TCP ソケットを使用できます。データが既にシリアル化可能なオブジェクトである場合は、それをテキスト ストリームにシリアル化し、ソケット経由で送信して、クライアント側で逆シリアル化することができます。

インターネット経由で動作させるには、サーバーはルーターでポートを転送する必要があり、クライアントはサーバーのパブリック IP に接続するだけです。このポートについても、ファイアウォールに例外を追加する必要があることは明らかです。

WCF と大きなデータに関する最大の問題は、ストリーミングの設定です。既定では、WCF はすべてを一度に送信しますが、これは大きなファイルには実用的ではありません。

于 2013-08-02T16:27:36.277 に答える