2009-06-15 23 views
2

私はマルチスレッドのクライアントサイドのjavascriptアプリケーションを構築しています。バックグラウンドスレッドでバイナリデータを取得してメインスレッドに渡したいと思います。私はこれがシリアル化を介して他の言語で行うことができますが、私はどのようにこれをJavaScriptで達成するのですか?どのようにバイナリメッセージをjavascript Webワーカーに/から渡しますか?


私は、スタンドアロンのXULRunnerアプリケーションに一層効率のための行を、このアプリケーションを断るかもしれないので、私はむしろ、Gearsを使用して対ルートをHTML5「ウェブ労働者を」いいよ。

答えて

4

Web Workers postMessage APIはJavaScriptオブジェクトを使用します。 MozillaのUsing web workersドキュメンテーションは言います:

あなたが安全でかつのpostMessage() メソッドを使用して労働者の うちのオブジェクトを渡すことができます。オブジェクトは自動的に が内部的にJSONに変換されます。

したがって、バイナリデータをサポートするか、またはバイナリデータに変換できるJavaScriptオブジェクトを使用できます。他の要因によっては、Base64文字列(How can you encode to Base64 using Javascript?参照)に変換するか、数値に配列を使用することができます。

+2

でなければならない答えに感謝をのpostMessageを使用!私はこの回答を投票するつもりだが、まだそのような評判はない。 「メッセージング」として文書化されているため、文字列のみが許可されていたとの印象を受けましたが、説明からはもっと多く処理できるようです。また、リンクに感謝します。 –

+2

実際、私はこのトピックについてさらに研究を重ねてきましたが、Firefoxが3.6以上で動作するように見えるJSONエンコーディングが現れています。 Firefox 3.5のリリース版でさえも。 私はwindow.atob()を使用する他のアプローチに従うと考えましたが、DOMにアクセスできないため、このメソッドはWebワーカー自体では使用できません。 私のアプリケーションをFirefoxの3.6+ビルドで動作させることができますが、今日は3.5しかないので、それはあまり効果がありません。 –

0

Google Gearsを使用していますか?これはまさに彼らのWorkerPoolスレッド実装のためのものです。

1

あなたはそれ以外の場合は、ここで示されたように、しかし、オブジェクト/データはATOBを使用して渡される前に、base64エンコード()

関連する問題