套接字.io -是发送对象必须的JSON

socket.io - is JSON a must to send an object

本文关键字:对象 必须的 JSON io 套接字      更新时间:2023-09-26

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

我对象:

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

我需要stringify吗?

var myBox  = JSON.stringify({
            x: 400,
            y: 700,
            ...
        });

现在我像这样发送它,msg是JSON:

socket.emit('message', msg);

您可以将对象传递给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);
});

是的,要发送一个对象,你需要将它序列化为一个字符串(或者确切地说,是ArrayBuffer)——一些比特序列通过网络(在HTTP/WS的引线下)。

然而,序列化不一定是JSON.stringify,它也可以是其他任何东西。

从我在他们的文档中读到的,Socket。io具有"自动JSON编码/解码",因此它将为您调用JSON.stringify,并接受普通对象作为.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