2012-08-04 14 views
20

Socket.ioでJavaScriptオブジェクトをサーバーからクライアントに送信するにはどうすればいいですか?私はWebSocketとしてSocket.ioを使用しています(.send()で送信し、messageイベントで聴く)。 私は、サーバー側のような何かをしようとしている:クライアント側のSocket.io JavaScriptオブジェクトを送信する方法

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

socket.send(myObject); 

を私はこの文字列を取得しています:[object Object]

答えて

35

あなたはなく、実際にイベントを放出する必要があります。

socket.emit('yourEvent', myObject); 

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

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

4

socket.send()オブジェクトはわかりませんが、JSONで楽しむことができます。あなたはこの方法で使用することができます:

socket.send(JSON.stringify(myObject)); 

を目的にJSONを解析するJSON.parse(json)を使用しています。

9

私は、以前の例を使用してこの問題に対処しました。私が見つけた答えは以下の通りです。Migrating 0.6 to 0.7+、これは私が以下に再現したものです。 v0.6で


socket.sendは自動的にJSONに{a: 'b'}ようなオブジェクトを変換することになります。

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

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

jsonフラグを使用します。

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

今、あなたはまた、ブラウザとサーバ間のカスタムイベントを放出し、受け取ることができます:イベント用

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

引数はJSONでエンコードされます自動的にあなたのために。

4

は、サーバー側で

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

し、クライアント側のJSON.parse()方法を、これを使用してみてください。

+0

私のAndroidクライアント、歓声に送信するときに私の魅力のように動作します! – Jack

関連する問題