web-dev-qa-db-ja.com

Socket.io JavaScriptオブジェクトの送信方法

JavaScriptオブジェクトを_Socket.io_でサーバーからクライアントに送信する方法は? Socket.ioをWebSocketとして使用しています(.send()で送信し、messageイベントでリッスンします)。サーバー側のようなことをしようとしているとき:

_var myObject = {
    message: 'Hello World!'
}

socket.send(myObject);
_

クライアント側では、次の文字列のみを取得しています:_[object Object]_

29
zsd

実際には、代わりにイベントを発行する必要があります。

_ socket.emit('yourEvent', myObject);
_

.send()を使用する場合、オブジェクトの文字列表現を送信するだけで、問題が発生しています。 .send()を使用できますが、最初にオブジェクトをJSONエンコードし、受信時にデコードする必要があることに注意してください。

特別な理由がない限り、標準のSocket.IO .emit()メソッドを使用することをお勧めします。これはすべてこれを行うためです。それがそこにあるものです。

44
Brad

古い例を使用してこの問題に遭遇しました。ここに私が見つけた答えがあります: .6から0.7+への移行 、以下に再現します。


V0.6では、socket.send{a: 'b'}などのオブジェクトをJSONに自動的に変換します。以下を使用してクライアントにデータを送信します。

socket.send({a: 'b'});

これはクールですが、根本的な問題を引き起こします。 JSONはオブジェクトだけでなく、文字列、数値などもエンコードします!したがって、JSONを渡すことを明示的に指定すると、APIがより明確になります(JSONのエンコード/デコードに関連してパフォーマンスが低下するため)。

V0.7では、jsonフラグを使用します。

socket.json.send({a: 'b'});

ブラウザとサーバー間でカスタムイベントを送信および受信できるようになりました。

socket.emit('my_event', {a: 'b'});

イベントの引数は、JSONで自動的にエンコードされます。

11
Amro

socket.send()はオブジェクトを理解しませんが、JSONで楽しんでいます。この方法を使用できます:

_socket.send(JSON.stringify(myObject));
_

そして、JSON.parse(json)を使用してJSONをオブジェクトに解析します。

5
SaliproPham

サーバーサイドでこれを使用してみてください

socket.json.send({ your : 'data' });

クライアント側のJSON.parse()メソッド。

4
Salman