8

リアルタイムの通信とファイルのアップロードが必要なアプリケーションを開発しています。できれば、多重化されたチャネルを使用した単一の接続で実行したいと思います。多重化を可能にするための Websocket プロトコルの拡張機能があるようですが、ブラウザのサポートはまだないと思います。

サーバーをJavaで開発したいと思っています。socketio のノード サーバーには名前空間に関する奇妙なバグがあり、そのための Java サーバーは名前空間で正しく動作しませんでした。

いくつかのjsonとバイナリを同時に送信できるように、単純な多重化システムが必要です。このために何かが存在しますか、それとも自分で何かを作成する必要がありますか? もしそうなら、どこから始めればよいですか?

4

2 に答える 2

8

指摘したいことの 1 つは、webSocket は本文の形式を指定しないため、多重化は複数のメッセージ形式をサポートすることではなく、HTTP に似ているということです。JSON、画像、バイナリなど、何でも送信できます

多重化とは、複数の通信をサポートするために 1 つの接続チャネルを再利用する方法に関するものです (通信における同様の概念)。これは通常、複数のモジュールが websocket 通信を必要とするシナリオで使用されますが、(SocketJS のように) 1 つの接続のみが許可されます。多重化技術を採用して世界を救います。

詳細については、https://github.com/sockjs/websocket-multiplex https://www.rabbitmq.com/blog/2012/02/23/how-to-compose-apps-using-websockets/ を参照して ください

于 2016-11-08T07:38:14.923 に答える
1

WebSocketFileTransferを含む、クライアント側用の事前に作成された Javascript ライブラリがあります 。

サーバー側のソリューションに関しては、私はあまり知りません。おそらく、2 つの Websocket 接続を選択するか、HTML5 javascript を使用してファイルを小さな Websocket メッセージに分割することを選択します。これにより、ファイルチャンク間で異なる Websocket メッセージを送信できるという事実により、疑似多重化が可能になります。

私はRubyの方が好きで、おそらくPleziフレームワークを使用してアプリ(または少なくともWebsocketバックエンド)を作成するでしょう...しかし、あなたが言及した名前空間の問題が、ファイルをチャンクに分割します。

編集

送信されたファイルを小さなチャンクに分割し、後で再構成しない限り、アップロード プロセスに関するフィードバックを提供するのは非常に難しいと思いました...

Websocket サーバー (独自に作成していない限り) は、ファイル転送が完了するまで受信データについて通知しないため、受信した量についてクライアントを更新できませんでした。また、ファイルを分割すると、接続が切断された場合にアップロードを再開できる場合があります。

これを考慮して、私は単一の接続を選択し、各ファイルをいくつかのチャンクに分割します (サーバーと使用目的に応じて、100Kb ごとにチャンクになる可能性があります)。

于 2015-07-21T04:00:46.410 に答える