3

フロントエンドにオブジェクトがあり、接続されているすべてのクライアントにブロードキャストしたいと考えています。私が定義した方法で、単なるオブジェクトとして送信できますか? それとも、送信する前に常に JSON オブジェクトとして stringyfy する必要がありますか?

私のオブジェクト:

var myBox = {
         x: 400,
         y: 700,
         w: 231,
         h: 199,
         c: "red",
         ....
         }

文字列化が必要ですか?

var myBox  = JSON.stringify({

            x: 400,
            y: 700,
            ...
        });

現時点では、次のように送信します。メッセージは JSON です。

socket.emit('message', msg);
4

3 に答える 3

11

自分で文字列化せずにオブジェクトを渡すことができemitます。プレーンテキストとして送信されますが、クライアント コールバックには解析済みオブジェクトが渡されます。

言い換えれば、これを行うことは問題ありません:

var myBox = {     
    x: 400,
    y: 700,
    w: 231,
    h: 199,
    c: "red"
}

socket.emit('message', myBox);

クライアントでリッスンするときは、次のことを心配する必要はありませんJSON.parse

socket.on('message', function (data) {
    alert(data.x);
});
于 2013-05-16T16:40:57.433 に答える
2

はい、オブジェクトを送信するには、オブジェクトを文字列 (または正確には ArrayBuffer) にシリアル化する必要があります。これは、(HTTP/WS のフードの下で) ネットワークを通過するビットのシーケンスです。

ただし、そのシリアライゼーションは必ずしも である必要はなくJSON.stringify、他のものでもかまいません。

docsで読んだことから、Socket.ioには「自動JSONエンコーディング/デコーディングJSON.stringify」があるため、プレーンオブジェクトを引数として受け入れて呼び出し.emitます。

于 2013-05-16T16:40:20.720 に答える
1

オブジェクトからのデータを使用して socket.emit を実行できます。

このような:

socket.emit("message",{x:myBox.x,y:myBox.y, w:myBox.w, h:myBox.h, c:myBox.c});

または試してください:

socket.emit("message",myBox); //haven't tested it, but if it works, give plalx credit
于 2013-05-16T16:42:26.497 に答える