4

クライアントがコマンドを送信し、サーバーがイベントをトリガーできるように、サーバーと複数のクライアント間の接続を維持する必要があります。サーバーは基本的に音楽プレーヤーであり、クライアントは「Play()」、「Pause()」、「GetPlaylists()」などのコマンドを送信します。サーバー側のサーバーは、クライアントに次のようなことを伝えることができる必要があります。 「SongEnded」または「PlayerPaused」。また、いくつかのデータ(現在の曲、アルバム画像、プレイリストなど)を送受信できる必要があります。自分でソケットを作成し、上記のすべてのシナリオを処理するための独自のプロトコルを作成することもできますが、誰かがすでにこれを行っている可能性があるため、私が本当に必要としているのは、リアルタイム用に作成されたフレームワークです- .NETのサーバーとクライアント間の通信。私' たとえば、xml-rpcを調べましたが、それを使用して「OnClientSend」をどのように処理する必要があるかわかりません。また、私が間違っていなければ、xml-rpcはRESTのように作られています。wcfも調べましたが、経験がないため、どこから始めればよいのか、単純なコンソールアプリでサーバーをホストする方法がわかりません。

重要:クライアントは.NETになれないようにする必要があります。
重要:これは、Java(Android)に接続できる必要があります。
重要:プライマリプラットフォームは、Windows(サーバーとクライアント)とAndroid(クライアント)です。
重要:オーディオのストリーミングは行われません。ただし、画像を送信する必要があります。

解決策のアイデアをいただければ幸いです。また、優れたフレームワークへのリンクや、.NET内にすでに存在するコンポーネントの使用方法の説明があれば、本当に嬉しいです。

[編集] 問題は、ソケットを介してデータを送信するときに、送信したパッケージがサーバーによって同時に読み取られるという保証がないことです(まったく!)。50、100、50バイトの順に送信する場合もありますが、サーバーはそれを200バイトのチャンク、または最初に100、100などとして読み取る場合があります。つまり、バッファを作成し、確実にわかるまでメッセージを読み込む必要があります(これは問題です)私はメッセージ全体を受け取りました(そしてそれ以上は何もありません)。

4

4 に答える 4

2

ZeroMQはあなたの問題にぴったりだと思います。自分と同じようなものを実装したようです。

  • 同時実行フレームワークとして機能するスーパーソケットライブラリ。

  • inproc、IPC、TCP、およびマルチキャスト間でメッセージを伝送します。

  • ファンアウト、pubsub、パイプライン、および要求/応答パターンでN-to-Nを接続します。

  • クラスター化された製品とスーパーコンピューティングに十分な速度。

  • スケーラブルなマルチコアメッセージパッシングアプリケーション用の非同期I/O。

  • 大規模でアクティブなオープンソースコミュニティ。

  • C、C ++、Java、.NET、Pythonを含む20以上の言語。

  • Linux、Windows、OSXを含むほとんどのOS。

  • LGPL自由ソフトウェア、iMatixCorporationによる商用サポート。

于 2010-09-14T13:54:09.467 に答える
1

WCFに行く必要があります:http://msdn.microsoft.com/en-us/netframework/aa663324.aspx

于 2010-09-07T19:29:15.903 に答える
0

XMPPWebSocketも確認できます。XMPPはメッセージングに限定されているだけでなく、いつでも自分の目的に合わせて拡張できます。WebSocketは、HTML5の一部であるため、順調に進んでいます。

于 2010-09-14T06:37:59.737 に答える
0

結局、いくつかの言語で簡単に実装できる独自の単純なプロトコルを作成することになりました。ソケットの両側にバッファの層を追加し、各メッセージの後に、これがメッセージの終わりであることを反対側に通知するバイトシーケンスを送信することで、目的の結果を達成しました。また、特別な「$ Return」メッセージを有効にするために、メッセージにIDを追加しました。

メッセージは、xmlserializerを使用して単純にシリアル化されたクラスです。クラスはxsdから生成されます。

于 2010-09-14T10:36:57.260 に答える