JavaScriptオブジェクトを_Socket.io
_でサーバーからクライアントに送信する方法は? Socket.ioをWebSocketとして使用しています(.send()
で送信し、message
イベントでリッスンします)。サーバー側のようなことをしようとしているとき:
_var myObject = {
message: 'Hello World!'
}
socket.send(myObject);
_
クライアント側では、次の文字列のみを取得しています:_[object Object]
_
実際には、代わりにイベントを発行する必要があります。
_ socket.emit('yourEvent', myObject);
_
.send()
を使用する場合、オブジェクトの文字列表現を送信するだけで、問題が発生しています。 .send()
を使用できますが、最初にオブジェクトをJSONエンコードし、受信時にデコードする必要があることに注意してください。
特別な理由がない限り、標準のSocket.IO .emit()
メソッドを使用することをお勧めします。これはすべてこれを行うためです。それがそこにあるものです。
古い例を使用してこの問題に遭遇しました。ここに私が見つけた答えがあります: .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で自動的にエンコードされます。
socket.send()
はオブジェクトを理解しませんが、JSONで楽しんでいます。この方法を使用できます:
_socket.send(JSON.stringify(myObject));
_
そして、JSON.parse(json)
を使用してJSONをオブジェクトに解析します。
サーバーサイドでこれを使用してみてください
socket.json.send({ your : 'data' });
クライアント側のJSON.parse()
メソッド。