サーバー側のアプリケーションはどのように作成されますか、クライアント - サーバー通信はどのように行われますか?
-
22-09-2019 - |
質問
.NETで書かれたクライアントサーバーアプリケーションを次のようにしたいと思います。
- サーバーはLinuxを実行しています
- サーバーには、ドキュメントURLを含むSQLデータベース(MySQL)があります
私たちが望むもの: - サーバー側は定期的にすべてのURLをクロールし、それらのフルテキストインデックスを作成します - クライアント側はGUIを使用してこのインデックスにクエリを実行できます
クライアントアプリケーションは、C#を使用して.NETで記述されます。ドキュメントで検索することに加えて、ここで説明されておらず、クライアント側が非常にうまく行われている他の多くのことを行うことができます。
サーバー側にもC#を使用したいと思いますが、この分野での経験はありません。このようなことは通常どのように行われますか?
いくつかの答えに基づいて、今すぐ質問を明確にします:
私にとって最も不明確なのは、クライアントサーバーのコミュニケーションが通常どのように処理されるかです。通常、クライアントとサーバーはソケットを使用しており、IPアドレス、ポート、NATトラバーサルなどの詳細について気にかけていますか?それとも、この透明性を高め、クライアントサーバーのメッセージや手順を簡単にする一般的なフレームワークとパターンがありますか?これの例や良い出発点はありますか?複数のクライアントを同時にサーバーするために単一のサーバーが必要な事実を処理する方法はありますか?
解決
LinuxでC#を使用するには、使用する必要があります 単核症. 。これは、CLR仕様のオープンソース実装です。
次に、TCP/IPソケットを開き、ビットを上下に送信する最低レベルから、.NETリモート、WCFへ、サーバー上のWebサービスの公開まで、サーバーとクライアント間で通信する方法を決定する必要があります。 MonoでのCompreat WCF実装がどのように複雑になっているかはわかりません。また、MonoとMS .NETの間のバイナリリモートに問題があると思います。
RPCスタイルのWebサービスが非常に優れたソリューションを提供することをお勧めします。また、Webサービスには、他のプラットフォームからクライアントを簡単に接続することができます。
編集質問の明確化に応じて。サーバーとクライアントの両方でC#を使用する場合は、サーバーでMono/ASP.NET/Webサービスを使用することをお勧めします。
私が行った1つの仮定は、クライアントプルモデルを実行できるということです。ここでは、すべてのメッセージがクライアントによって開始されます。別のアプローチを使用すると、サーバーがイベントをクライアントにプッシュできるようになります。クライアントにサーバーを定期的にポールする機能があることを考えると、これほど多くのドローバックを考慮していませんが、開発しているアプリケーションの種類に依存する可能性があります。
LinuxボックスでC#(ILにコンパイルされた)の実行をMono許可します。 Mono ASP.NETを使用すると、標準ASP.NETを使用してApacheに統合できます http://www.mono-project.com/asp.net そして最後に、Webサービスを使用すると、クライアントとサーバーの間で強くタイプされた方法で堅牢に通信することができます。
このアプローチを使用すると、説明で提起された問題のほとんどが無効になり、他の人の問題になります。
ソケット/SSL - クライアント上の標準.NETランタイムとサーバー上のApacheで標準的な.NETランタイムで処理されます。
iPaddress/ports/natトラバーサル - すべて世話をします。 DNS検索でサーバーIPが取得されます。オープンソケットにより、サーバーはファイアウォールとNATセットアップを介して応答できます。
複数のクライアント -Apacheは、ASP.NETと同時に複数のクライアントの処理を処理するように構築されているため、問題に遭遇しないでください。
他のヒント
すでに多くの人に言及しているように、あなたが痛みを引き起こすことになることがあなたが言及したことがたくさんあります。私はそれらに行くつもりはありません。代わりに、コミュニケーションに関するあなたの元の質問に答えます。
この種のコミュニケーションで現在の人気のある選択は、Webサービスです。これらを使用すると、HTTPプロトコルを使用してリモートコールを作成し、XMLのリクエストと応答をエンコードできます。この方法には批評家がいますが、私は立ち上がって実行するのが非常に簡単であることがわかりました。ほぼすべてのアプリケーションでは正常に機能します。
.NETフレームワークは、クライアントが間違いなく呼び出すことができるWebサービスをサポートしています。 Mono Webサイトを簡単に見ると、Webサービスもサポートされていることが示されているため、サーバーをC#で作成してMonoで実行するのは問題ありません。 「C#Webサービスチュートリアル」をグーグルで検索すると、開始方法に関する情報がある多くのサイトが表示されます。これらの結果からのランダムな選択があります。
http://www.codeguru.com/csharp/csharp/cs_webservices/tutorials/article.php/c5477
別のアプローチ:説明されているように、Apacheにmod_aspdotnetモジュールを使用します ここ.
これ C#の基本的なクライアント/サーバーチャットアプリケーション 私にとって出発点かもしれない一種の例のように見えます。関連する.NETクラスはです tcpclient と tcplistener