在 javascript 套接字中发送 JSON.stringify 对象和普通对象有什么区别?
What is the difference between sending JSON.stringify objects and plain objects in javascript sockets?
我正在构建一个使用 socket.io
的 javascript 套接字应用程序,我是网络编程的新手。我不知道在网络中传递数据的最佳方式是什么。我知道传递二进制数据是最有效的方法,但它更复杂。所以我现在想从普通对象开始。
我之前构建了一个聊天应用程序,我只是在其中使用了 socket.emit('message', obj)
,它运行得非常好。但是我看到了一些使用 socket.emit('message', JSON.stringify(obj))
传递数据的例子。我不确定这里有什么好处。它会使网络上传递的数据变小吗?它比普通对象更有效吗?
如果你在socket.io中传递.emit()
一个对象作为数据参数,它会在发送端自动调用JSON.stringify()
并在接收端自动调用JSON.parse()
结尾。
因此,您只需传递一个对象,接收方就会返回一个对象,socket.io 会自动为您处理好中间的所有事情。
据我所知,自己打电话给socket.emit('message', JSON.stringify(obj))
没有任何好处。只需使用 socket.emit('message', obj)
。它不会更小、更快或更高效。
默认情况下,socket.io will call stringify
适合您,因此手动执行此操作毫无意义。
最有可能的是,简单 socket.emit('message', obj)
可以满足您的需求。即使你想 emit binary, that's how it done. It seems it "just works", there is not much documentation about it. Basically, you have to emit something that passes hasBin
-check ie. it has to be Buffer
, ArrayBuffer
, Blob
or File
.
Node.js API 中没有 Buffer.fromObject
方法是有原因的。如果您想将 Object
以二进制形式发送,则必须设计如何将其表示为二进制数据。这是否是个好主意,取决于您要处理的数据类型。如果您的数据主要是字符串,那么您就不能对其进行太多填充。如果你有很多整数、数字、布尔值等,那么使用二进制可能是个好主意,但设计高效的二进制格式需要做一些额外的工作。
此外,还有一种格式叫做BSON。它也有浏览器实现,所以从技术上讲,应该可以将任意 Javascript Object
序列化为 Buffer
,使用 socket.io 发送,然后在浏览器中反序列化。我从未在浏览器环境中使用过它:这听起来很有趣,但需要进行一些性能测试。
我正在构建一个使用 socket.io
的 javascript 套接字应用程序,我是网络编程的新手。我不知道在网络中传递数据的最佳方式是什么。我知道传递二进制数据是最有效的方法,但它更复杂。所以我现在想从普通对象开始。
我之前构建了一个聊天应用程序,我只是在其中使用了 socket.emit('message', obj)
,它运行得非常好。但是我看到了一些使用 socket.emit('message', JSON.stringify(obj))
传递数据的例子。我不确定这里有什么好处。它会使网络上传递的数据变小吗?它比普通对象更有效吗?
如果你在socket.io中传递.emit()
一个对象作为数据参数,它会在发送端自动调用JSON.stringify()
并在接收端自动调用JSON.parse()
结尾。
因此,您只需传递一个对象,接收方就会返回一个对象,socket.io 会自动为您处理好中间的所有事情。
据我所知,自己打电话给socket.emit('message', JSON.stringify(obj))
没有任何好处。只需使用 socket.emit('message', obj)
。它不会更小、更快或更高效。
默认情况下,socket.io will call stringify
适合您,因此手动执行此操作毫无意义。
最有可能的是,简单 socket.emit('message', obj)
可以满足您的需求。即使你想 emit binary, that's how it done. It seems it "just works", there is not much documentation about it. Basically, you have to emit something that passes hasBin
-check ie. it has to be Buffer
, ArrayBuffer
, Blob
or File
.
Node.js API 中没有 Buffer.fromObject
方法是有原因的。如果您想将 Object
以二进制形式发送,则必须设计如何将其表示为二进制数据。这是否是个好主意,取决于您要处理的数据类型。如果您的数据主要是字符串,那么您就不能对其进行太多填充。如果你有很多整数、数字、布尔值等,那么使用二进制可能是个好主意,但设计高效的二进制格式需要做一些额外的工作。
此外,还有一种格式叫做BSON。它也有浏览器实现,所以从技术上讲,应该可以将任意 Javascript Object
序列化为 Buffer
,使用 socket.io 发送,然后在浏览器中反序列化。我从未在浏览器环境中使用过它:这听起来很有趣,但需要进行一些性能测试。