1

ユーザーがPHP経由で接続できるようにしたい.net winformアプリケーションがあります。

私は個人的な選択で PHP を使用しており、コストを低く抑えるために使用しています。

簡単な概要:

人々は私の .net アプリに接続し、ブラウザーを閉じた後も実行を継続する新しいスレッドを開始できます。その後、いつでもログインして、スレッドの実行状況を確認できます。

現在、私はこれを行う2つの方法を考え出しました:

アイデア 1 - ソケット:

ユーザーが初めて接続してスレッドを生成すると、GUID が「Web」ログインの詳細に関連付けられます。

次に PHP がソケット経由でアプリに接続すると、PHP は GUID を含む「GET.UPDATE」コマンドを送信します。このコマンドは、指定された GUID の MESSAGE IN QUEUE に追加されます。

.net アプリによって生成されたスレッドは、MESSAGE IN QUEUE をチェックしており、「GET.UPDATE」コマンドを確認すると、データを json にエンドコードし、MESSAGE OUT QUEUE に追加します。

次にその GUID から PHP ソケット要求があると、MESSAGE OUT QUEUE でデータが送信されます。

アイデア 2 - データベース:

上記と同じアイデアですが、PHP からのコマンドはデータベースに入れられます

.net アプリ スレッドは、データベース内の新しい IN MESSAGES をチェックします

GET.UPDATE コマンドを取得すると、json でエンコードされたデータがデータベースに追加されます。

次に PHP が接続すると、データベースに新しいメッセージがあるかどうかがチェックされ、それに応じてデータが報告されます。

上記の2つのアイデアのどちらが最適かを考えてみました。ソケットをいじると、すぐに苦痛になる可能性があります。しかし、数千人のユーザーがいる場合、キューに大量のメッセージがあるとデータベーステーブルが遅くなり始める可能性があるというデータベースのアイデアが心配です

どんなアドバイスも適用されます。

4

1 に答える 1

0

どちらのソリューションも受け入れられますが、ユーザーの負荷が高い場合は、アプローチを再検討することをお勧めします。何千ものリクエストを検討している場合、WinForms ソリューションは WCF ソリューションほど堅牢ではありません。プロセスの結果が既にデータベースに保存されている場合を除き、メッセージングのみにデータベースを使用することはお勧めしません。そうであれば、データベースを直接公開するのではなく、公開された API を介してデータベース アクセスを制限することをお勧めします。データベースは高可用性/スケーラブルになるように作られているため、SQLite のようなローエンド データベースを検討している場合を除き、負荷についてあまり心配する必要はありません。

データベースを公に公開し、何らかの理由でメッセージング サービスとして使用することを検討している場合は、Postgresql の LISTEN/NOTIFYをお勧めします。Npgsql はこれを適切にサポートしており、実装は非常に簡単です。Postgresql も無料で利用でき、サポートのための大規模なコミュニティがあります。

于 2012-07-11T14:00:02.103 に答える