39

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

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

socket.send(myObject);

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

4

5 に答える 5

65

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

 socket.emit('yourEvent', myObject);

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

特別な理由がない限り、標準の Socket.IO.emit()メソッドを使用することをお勧めします。標準の Socket.IO メソッドがすべてを自動的に行ってくれるからです。それがその目的です。

于 2012-08-04T01:20:14.037 に答える
11

古い例を使用して、この問題に遭遇しました。これが私が見つけた答えです: Migrating 0.6 to 0.7+、以下に再現します。


v0.6 では、JSONsocket.sendのようなオブジェクトを自動的に変換します。{a: 'b'}次の方法でクライアントにデータを送信します。

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

これは素晴らしいことですが、根本的な問題を引き起こします。JSON はオブジェクトだけでなく、文字列、数値などもエンコードします! そのため、JSON を渡したいと明示的に述べた場合、API はより明確になります (JSON のエンコード/デコードに関連するパフォーマンスのペナルティがあるため)。

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

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

これで、ブラウザとサーバーの間でカスタム イベントを発行および受信することもできます。

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

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

于 2013-05-18T10:16:49.167 に答える
8

socket.send()オブジェクトはわかりませんがJSONで楽しんでいます。次の方法で使用できます。

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

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

于 2012-10-16T03:32:39.223 に答える