websocket的子协议(protocols)有哪些作用?
new WebSocket(url [, protocols]);
protocols
可选
一个协议字符串或者一个包含协议字符串的数组。这些字符串用于指定子协议,这样单个服务器可以实现多个WebSocket子协议(例如,您可能希望一台服务器能够根据指定的协议(protocol
)处理不同类型的交互)。如果不指定协议字符串,则假定为空字符串。
这个是DMN上的解释,我一直的大概理解是一个连接当多个用。但是想实际应用又不知从何开始,所以有几个问题:
- 子协议(protocols)能实现什么业务场景
- 如何应用
谢谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
不是一个链接当多个用,而是支持多种类型的数据。
同一个服务器,既可以返回 JSON 数据、又可以返回图片数据、还可以返回 HTML/CSS/JS 等文本数据、甚至还可以返回视频数据。同一个浏览器,既可以给后端提交表单、又可以给后端提交 JSON。这些数据类型,前后端怎么区分它们呢?
在 HTTP 请求和响应标头里,有
Accept
、Accpet-Encoding
、Accept-Language
、Content-Type
、Content-Encoding
、Content-Language
、Content-Length
、Content-Range
等等等等一系列的值,可以描述在浏览器和服务器之间传递的数据是啥。比如浏览器给服务器发送一个
Content-Type: application/json
,那服务器就知道了这是个 JSON 数据,就要按 JSON 的格式去解析;服务器给浏览器返回了一个Content-Type: image/jpeg
,浏览器就知道这是一个图片数据,就要按图片的格式去解析。所以在 WebSocket 里,也有这么一个值可以表示传输的数据类型是啥,就是这个子协议了。其本质也是一个请求或响应标头。
不过上面说的两种 HTTP 的数据类型,都是 MIME,有个 RFC-6838 来规范它们。但 WebSocket 里就没有这种规范了,你得自己去定义。
这个值无论在 HTTP 中也好、在 WebSocket 中也罢,都是前后端之间的“约定”,得两端都得遵守才行。浏览器发给服务器的标明了自己是
application/json
,但服务器压根不管,偏要按照application/x-www-form-urlencoded
去解析,那就没办法了。