在交互式Web应用程序的背景下,特别是那些利用诸如Websockets等技术的库,我们如何在客户端浏览器和服务器之间传输数据结构(例如地图、列表、集合等)?到目前为止,我遇到的示例仅传递字符串。这是否取决于使用的库支持情况,还是有更通用的机制可用?
您可以通过websocket发送三种类型的数据(从客户端角度看):- 字符串 - ArrayBuffer - Blobs如果您有一个复合的JavaScript数据结构(由映射和数组组成的层次结构),那么您应该使用JSON将它们序列化为字符串并将它们作为字符串发送到WebSocket连接。如果您有兴趣在WebSocket连接上发送二进制字节或文件数据,您仍然可以将其序列化为字符串(带宽效率低下),或者您可以将数据发送为ArrayBuffer或Blob。注意1:当发送ArrayBuffer或Blob时,在线上会生成一个二进制WebSocket帧,因此您的服务器需要支持二进制帧。注意2:客户端可以选择在服务器发送二进制帧时返回哪种类型的对象。这是WebSocket对象中的binaryType属性,可以设置为"arraybuffer"或"blob"。注意3:如果您的浏览器仅支持较旧的WebSocket Hixie协议系列(例如iOS Safari),则没有二进制数据,您只能发送和接收字符串。