Javascript 什么是WebSocket子目录?

Javascript 什么是WebSocket子目录?,javascript,node.js,websocket,Javascript,Node.js,Websocket,我一直在尝试在nodejs中从头开始实现WebSocket协议,因此我有一个问题一直没有得到认可。关于WebSocket,子目录究竟是什么?WebSocket构造函数的第二个参数是指定“subtocols”的位置- 有人能告诉我他们的目的吗?在 将子目录视为自定义XML模式或doctype声明。 您仍然在使用XML及其语法,但您还需要 受你同意的结构限制。WebSocket子目录是 就这样。他们不引进任何花哨的东西,他们只是 建立结构。与doctype或schema一样,双方必须达成一致 关于次

我一直在尝试在nodejs中从头开始实现WebSocket协议,因此我有一个问题一直没有得到认可。关于WebSocket,子目录究竟是什么?WebSocket构造函数的第二个参数是指定“subtocols”的位置-

有人能告诉我他们的目的吗?

将子目录视为自定义XML模式或doctype声明。 您仍然在使用XML及其语法,但您还需要 受你同意的结构限制。WebSocket子目录是 就这样。他们不引进任何花哨的东西,他们只是 建立结构。与doctype或schema一样,双方必须达成一致 关于次级方案;与doctype或schema不同,subtocol是 在服务器上实现,不能由 客户

本规范第1.9节、第4.2节、第11.3.4节和第11.5节对子方案进行了说明

客户必须要求特定的子策略。为此,它将发送 作为原始握手的一部分:

http获取/聊天http/1.1。。。Sec WebSocket协议:soap、wamp

或者,相当于:

。。。Sec WebSocket协议:soap Sec WebSocket协议:wamp

现在,服务器必须选择客户端所使用的协议之一 建议和支持。如果有多个,请发送第一个 客户端发送的一个。假设我们的服务器可以同时使用soap和wamp。 然后,在响应握手中,它发送:

Sec-WebSocket协议:soap

服务器发送的Websocket协议头不能超过一秒。如果 服务器不想使用任何子脚本,它不应该发送任何子脚本 Sec WebSocket协议头。发送空白标题不正确。 如果客户端未获取子脚本,则可能会关闭连接 它想要

如果您希望服务器遵守某些子策略,那么 服务器上需要额外的代码。让我们想象一下,我们正在使用 子目录json。在这个子程序中,所有数据都作为JSON传递。如果 客户端请求此协议,而服务器想要使用它 服务器需要有一个JSON解析器。实际上,这将是 是库的一部分,但服务器需要传递数据


WebSocket只是定义了一种交换任意消息的机制。这些消息意味着什么,客户端在任何特定时间点可以期望什么类型的消息,或者允许它们发送什么消息,完全取决于实现应用程序。因此,您需要在服务器和客户端之间就这些事情达成协议。你可能会说…你需要一个协议规范。Subtocol参数只允许客户端正式交换此信息。您可以为任何协议编写任何名称。服务器可以简单地检查客户端在握手过程中是否遵守该协议。您还可以使用它从服务器请求不同类型的协议,或者使用它进行版本控制(例如,当您引入
my-protocol-v2
时,但仍然需要支持客户端只理解
my-protocol-v1
)。

好的,我明白这有什么意义。例如,假设我的客户机有两种基于两种不同情况的解析和评估消息的方法,那么在客户机端,我根据客户机的需求通过一个子程序为其中一种特定的方法发送消息,所以在服务器端,我实现了这些协议。但是,当我的服务器收到Sec WebSocket协议头时,它将使用指定的子策略。这是一个有效的senario/解释吗?为了更具体一点,您的服务器可能支持发送JSON或XML编码的消息。客户机可以告诉服务器它支持哪些方法,然后服务器可以选择一种方法并同意该特定子策略。-或者,您可以使用它来表示客户端希望获得和/或发送什么类型的消息。或者您可以想到的任何其他自定义使用,帮助客户机和服务器协商一组特定的通信规则。好的,这非常有意义。谢谢你为我把它放在正确的角度!
let socket = new WebSocket("ws://localhost:3000",["http",...]);