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

iaqfqrcu  于 2023-01-27  发布在  Java
关注(0)|答案(3)|浏览(160)

我正在使用socket.io构建一个javascript socket应用程序,我是网络编程的新手。我不知道在网络中传递数据的最佳方式是什么。我知道传递二进制数据是最有效的方式,但它更复杂。所以现在我想从普通对象开始。
我以前用socket.emit('message', obj)构建过一个聊天应用程序,它运行得非常好。但是我看到过一些使用socket.emit('message', JSON.stringify(obj))传递数据的例子。我不确定它的好处是什么。它是否使网络上传递的数据更小?它是否比普通对象更有效?

mspsb9vt

mspsb9vt1#

默认情况下,socket.io会为您调用stringify,因此手动调用是没有意义的。
最有可能的是,简单的socket.emit('message', obj)能满足你的需要。即使你想发出二进制代码,它也是这样做的。看起来它“只是工作”,没有太多关于它的文档。基本上,你必须发出通过hasBin检查的代码,也就是说,它必须是BufferArrayBufferBlobFile
在Node.js API中没有Buffer.fromObject方法,这是有原因的。如果你想把Object作为二进制发送,你必须设计如何把它表示成二进制数据。不管是否这样,这是个好主意,取决于你处理的是什么类型的数据。如果你的数据主要是字符串,那么你不能对它进行太多的填充。如果你有很多整数、数字、布尔值等,那么使用二进制可能是个好主意,但是要设计高效的二进制格式需要做很多额外的工作。
还有一种叫做BSON的格式,它也有浏览器实现,所以从技术上讲,应该可以将任意的Javascript Object序列化为Buffer,使用www.example.com发送socket.io,然后在浏览器中反序列化,我还没有在浏览器环境中使用过它:这听起来像是个有趣的想法,但它需要一些性能测试。

umuewwlo

umuewwlo2#

如果您在www.example.com中传递.emit()一个对象作为数据参数socket.io,它将在发送端自动调用JSON.stringify(),并在接收端自动调用JSON.parse()
所以,你只要传递一个对象,接收器就会返回一个对象,socket.io会自动为你处理这两者之间的所有事情。
据我所知,自己调用socket.emit('message', JSON.stringify(obj))并没有什么好处,就用socket.emit('message', obj)吧,它不会更小或更快或更高效。

1mrurvl1

1mrurvl13#

因为它是一个对象而不是字符串,所以您可以在其他文件中使用该对象,而无需JSON.parse。
它使代码更简单,但就像其他人说的,没有物理上的区别,因为编译器将字符串化它无论如何,也许是一个更小的文件大小的应用程序。

相关问题