シンプルなクライアント/サーバー チャット アプリケーションを作成したいと考えています。
アイデアは、1 つのクライアントがサーバーにメッセージを送信すると、サーバーが他のクライアントに変更を通知するというものです。
ファイアウォールの問題に対処せずにこれを行う最善の方法は何ですか?
以上のWebサービスで実行できますhttp
か?
WCF サービスは、ファイアウォールを使用しwsHttpBinding
たりbasicHttpBinding
、ファイアウォールとうまく連携したりします。直面する主な問題は、いくつかのファイアウォール設定の変更が必要になる可能性があることをクライアントに通知するサーバーです。
サーバーはポートでリッスンしている必要があります。そのポートは、ファイアウォールを介してアクセスできる必要があります。この2つは避けられません。通常は、作成したポート番号 (衝突を避けるために 1024 よりも大きい番号) をサーバーにリッスンさせます。次に、ファイアウォールがそのポートをサーバーに渡すようにします。
普通の人がサーバーをホストすることを期待している場合は、少し注意が必要です。ホームルーターでポート転送を有効にする必要があるか、マッチメイキング用の集中型サーバーが必要です.
これが Skype または Halo の仕組みです (Skype は中央サーバーをスーパーノードと呼びます)。ここに例があります。
C は中央の Skype サーバーです。AがアリスでBがボブ。アリスはボブに電話したいと思っています。
C はいくつかのポートでリッスンし、C のファイアウォールにより、
A を介して Skype にログインし、C に接続します
B は Skype にログインし、C に接続し
ます A は B に電話したいというメッセージを C に
送信します C は B にメッセージを送信します接続されているので大丈夫です)そのように言っています。
通話が接続されると、A と B はすべてのメッセージを C に送信し、C はそれらを宛先に転送します。
サーバーで HTTP サーバーを実行し、各クライアントで HTTP サーバーへの接続を開いたままにすることができます。
これは、COMET スタイルの Web サービスを使用して実現できます。
WCF を使用してサービスを構築している場合は、ポート 80 で動作するサービスを Duplex Binding で実装します。