如何在浏览器和服务器之间传输数据结构

sky*_*ork 3 comet websocket

在交互式Web应用程序的环境中,特别是那些利用websockets等技术的库,我们如何在客户端浏览器和服务器之间传输数据结构(例如地图,列表,集等)?到目前为止我遇到的例子只传递字符串.

这种情况是否依赖于所使用的库,或者是否有更通用的机制?

kan*_*aka 5

您可以通过websocket发送三件事(从客户端角度):

  • 字符串
  • ArrayBuffers
  • 斑点

如果您有复合Javascript数据结构(地图和数组的层次结构),那么您应该使用JSON将它们序列化为字符串并通过WebSocket连接将它们作为字符串发送.

如果您有兴趣通过WebSocket连接发送二进制字节或文件数据你仍然可以序列化到一个字符串(低效带宽明智),也可以作为ArrayBuffers或小圆块发送数据.

注1:当发送ArrayBuffer或Blob导致线上的二进制WebSocket帧时,您的服务器需要支持二进制帧.

注2:客户端可以选择在服务器发送二进制帧时返回的对象类型.这是WebSocket对象上的binaryType属性,可以设置为"arraybuffer"或"blob".

注3:如果您的浏览器仅支持较旧的WebSocket Hixie协议系列(例如iOS Safari),则没有二进制数据,您只能发送和接收字符串.