Javascript 是否总是在WebSocket的onerror之后调用onclose

Javascript 是否总是在WebSocket的onerror之后调用onclose,javascript,websocket,Javascript,Websocket,如果onclose之后不会立即调用,是否可以调用onerror回调?换言之,是否可能出现与随后关闭的连接不一致的WebSocket错误 如果可能的话,我想测试一下这个案例。我有一个模拟后端,它使用node.js和expressws。在后端我可以做些什么来触发前端的onerror事件回调。只有在触发close事件之前才会触发错误事件,至少通过正确实现规范的实现,也就是说,您将获得错误和关闭作为一对,或者自己关闭 如果需要,第二个可选择触发错误事件: 如果要求用户代理使WebSocket连接失败,或

如果onclose之后不会立即调用,是否可以调用onerror回调?换言之,是否可能出现与随后关闭的连接不一致的
WebSocket
错误


如果可能的话,我想测试一下这个案例。我有一个模拟后端,它使用node.js和expressws。在后端我可以做些什么来触发前端的onerror事件回调。

只有在触发
close
事件之前才会触发
错误
事件,至少通过正确实现规范的实现,也就是说,您将获得
错误
关闭
作为一对,或者自己关闭

如果需要,第二个可选择触发
错误
事件:

  • 如果要求用户代理使WebSocket连接失败,或者如果WebSocket连接在标记为已满后关闭,则在WebSocket对象上触发一个名为
    error
    的简单事件。[WSP]
  • 在第三步之前,然后调用close:

  • 创建使用
    CloseEvent
    界面的受信任事件,事件类型为
    close

  • 因为这两个步骤都是在同一个队列任务中一个接一个地进行的,所以应该一个接一个地调用事件处理程序,它们之间没有其他事件或任务发生。

    我认为如果无法建立连接,可能会出现错误,无法关闭,因为连接甚至没有打开。@Safareli您看到过这种情况吗?我认为如果是这样的话,浏览器将以非标准方式运行-正如我在回答中提到的,规范唯一提到
    错误
    事件触发的时间是在触发
    关闭
    之前。如果你真的看到了一些不同的东西,那就值得拥有详细信息(浏览器版本等),因为这可能是一个bug。@Safareli事实上,规范提到了打开连接失败时的情况:“如果建立WebSocket连接算法失败,它会触发失败WebSocket连接算法,然后调用关闭WebSocket连接算法,然后确定WebSocket连接已关闭,这将触发关闭事件,如下所述。“-ie与我的回答中所述的步骤相同,因此它确实不应该单独触发
    错误
    。实际上,当在ie中创建太多WebSocket时(在一个IE浏览器中,最大值为6),则只会调用一个错误,而不是通过OneError函数调用,而是作为脚本错误调用(更具体的是:SCRIPT5022:SecurityError,是正在调用的错误)。如果发生这种情况,将不会调用onclose方法!@ougiii有趣-猜这属于我的“以非标准方式行为”范围上面的评论。不过我猜这是一条相当边界线,因为失败的不是连接(这是触发onerror的原因),而是IE本身甚至拒绝尝试打开另一个连接。