3

我在前端有一个对象,我想将它广播给所有连接的客户端。我可以按照我定义的方式将它作为一个单纯的对象发送吗?还是我总是必须在发送之前将其作为 JSON 对象进行字符串化?

我的对象:

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,它也可以是其他任何东西。

从我在他们的文档中读到的内容来看,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 回答