2016-11-19 4 views
0

私はsocket.ioを使用するjavascriptソケットアプリケーションを構築しており、ネットワークプログラミングを初めて利用しています。ネットワークでデータを渡す最善の方法は何か分かりません。私は、バイナリデータを渡すことが最も効率的な方法だと理解していますが、それはより複雑です。だから今は普通のものから始めたいと思う。JSON.stringifyオブジェクトとプレーンオブジェクトをjavascriptソケットで送信する違いは何ですか?

私はちょうどsocket.emit('message', obj)を使用したチャットアプリケーションを作成しました。それは完全に正常に動作します。しかし、私はsocket.emit('message', JSON.stringify(obj))を使ってデータを渡すいくつかの例を見てきました。私は何の利益がここにあるのか分かりません。ネットワーク上を通過するデータのサイズを小さくしますか?普通のオブジェクトよりも効率的ですか?

+0

「obj」とは何ですか?それが電線を越える前に、それは何かにシリアル化されなければなりません。多分socket.ioがあなたのためにこれをフードの下で行います。 – Thilo

+0

これは 'emit'がすでにあなたのために行っているようです:http://stackoverflow.com/questions/11805130/socket-io-how-to-send-javascript-object(' send'はあなたにデータ)。 – Thilo

+0

@Thilo 'obj'は普通のオブジェクトです。 – newguy

答えて

0

デフォルトではsocket.io will call stringifyですので、手動で行うのは意味がありません。

ほとんどの場合、簡単なsocket.emit('message', obj)はあなたが望むことをします。 emit binaryにしたい場合でも、それはどのようにそれが行われます。それは "ちょうどうまくいく"ようだが、そこにはあまり書類がない。基本的には、hasBin -checkを渡す何かを放出する必要があります。それはBuffer, ArrayBuffer, Blob or Fileでなければなりません。

Node.js APIにはBuffer.fromObjectというメソッドはありません。 Objectをバイナリとして送信する場合は、バイナリデータとして表現する方法を設計する必要があります。良いアイデアであろうとなかろうと、それはあなたが扱っているデータの種類に依存します。あなたのデータがほとんど文字列であれば、それほどシムできません。整数、数、ブール値などが多い場合は、バイナリを使うのは良い考えですが、効率的なバイナリ形式を設計するにはかなり余分な作業です。

また、BSONという形式があります。それはブラウザの実装も持っているので、技術的には、任意のJavascript ObjectBufferにシリアル化し、socket.ioを使用して送信し、ブラウザで逆シリアル化する必要があります。私はこれまでブラウザー環境で使っていませんでした。面白い考えのようですが、パフォーマンステストが必要です。

+0

非常に有益であり、非常に完全な答えです。 – newguy

0

socket.ioのデータパラメータとしてオブジェクトを.emit()に渡すと、自動的にJSON.stringify()が送信側で呼び出され、受信側でautomaticly JSON.parse()が呼び出されます。

したがって、オブジェクトを渡すだけで受信者がオブジェクトを取得し、socket.ioが自動的に間にあるすべてのものを処理します。

私が知る限り、自分でsocket.emit('message', JSON.stringify(obj))を呼び出す利点はありません。ちょうどsocket.emit('message', obj)を使用してください。それは小さくても速くも効率的でもありません。

関連する問題