Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript套接字中发送JSON.stringify对象和普通对象有什么区别?_Javascript_Json_Websocket_Stringify - Fatal编程技术网

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

在javascript套接字中发送JSON.stringify对象和普通对象有什么区别?,javascript,json,websocket,stringify,Javascript,Json,Websocket,Stringify,我正在构建一个javascript套接字应用程序,它使用socket.io,我对网络编程还不熟悉。我不知道在网络中传递数据的最佳方式是什么。我知道传递二进制数据是最有效的方法,但它更复杂。现在我想从普通对象开始 我以前构建过一个聊天应用程序,我只是在其中使用了socket.emit('message',obj),它工作得非常好。但是我看到一些示例使用socket.emit('message',JSON.stringify(obj))传递数据。我不确定这里有什么好处。它是否使网络上传输的数据更小?

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

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

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

因此,您只需传递一个对象,接收器将返回一个对象,socket.io将自动为您处理这两者之间的一切

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

默认情况下,对您来说,手动操作是没有意义的

最有可能的是,简单的
socket.emit('message',obj)
实现了您想要的功能。即使你想这样做,事情也是这样。它似乎“只是工作”,没有太多的文档。基本上,你必须发射通过检查的东西,也就是说,它必须是

由于某种原因,Node.js API中没有-method。如果您想将
对象
作为二进制发送,则必须设计如何将其表示为二进制数据。这是否是个好主意,取决于您处理的数据类型。如果您的数据主要是字符串,那么您就不能对其进行太多填充。如果你有很多整数、数字、布尔值等,那么使用二进制可能是个好主意,但是设计高效的二进制格式需要做很多额外的工作


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

什么是
obj
?在它通过连接之前,必须将其序列化为某些内容。也许socket.io在幕后为你做了这件事。似乎
emit
已经为你做了这件事:(而
send
让你选择如何序列化数据)。@Thilo
obj
是一个简单的对象。谢谢,它提供了非常丰富的信息,是一个非常完整的答案。答案肯定是被低估的;)