在javascript套接字中发送JSON.stringify对象和普通对象有什么区别?

时间:2016-11-19 02:54:27

标签: javascript json websocket stringify

我正在构建一个使用socket.io的javascript套接字应用程序,我是网络编程新手。我不知道在网络中传递数据的最佳方法是什么。我知道传递二进制数据是最有效的方法,但它更复杂。所以我想暂时从普通对象开始。

我之前使用socket.emit('message', obj)构建了一个聊天应用程序,它的工作原理非常好。但我已经看到一些使用socket.emit('message', JSON.stringify(obj))传递数据的示例。我不确定这里有什么好处。它是否使网络上传输的数据更小?它比普通对象更有效吗?

2 个答案:

答案 0 :(得分:0)

如果您将.emit()对象作为socket.io中的数据参数传递,它将自动在发送方端调用JSON.stringify()并自动在接收端调用JSON.parse()

所以,你可以传递一个对象,接收器将返回一个对象,socket.io将自动处理它们之间的所有内容。

据我所知,自己调用socket.emit('message', JSON.stringify(obj))没有任何好处。只需使用socket.emit('message', obj)即可。它不会更小,更快或更有效。

答案 1 :(得分:0)

默认情况下,您为socket.io will call stringify,因此手动执行此操作毫无意义。

最有可能的是,简单socket.emit('message', obj)可以满足您的需求。即使你想要emit binary,也就是它的完成方式。它似乎只是工作",没有太多关于它的文档。基本上,你必须发出通过hasBin的东西 - 检查即。它必须是Buffer, ArrayBuffer, Blob or File

Node.js API中没有Buffer.fromObject - 方法,原因如此。如果要将Object作为二进制文件发送,则必须设计如何将其表示为二进制数据。它是否好主意取决于您正在处理的数据类型。如果您的数据主要是字符串,那么您就无法对其进行整理。如果你有很多整数,数字,布尔值等,那么使用二进制文件可能是个好主意,但设计有效的二进制格式需要额外的工作。

此外,还有一种名为BSON的格式。它也有浏览器实现,所以从技术上讲,应该可以将任意Javascript Object序列化为Buffer,使用socket.io发送,然后在浏览器中反序列化。我还没有在浏览器环境中使用它:它听起来很有趣,但它需要一些性能测试。