javascript 在 onopen 事件中获取 websocket 错误
Posted
技术标签:
【中文标题】javascript 在 onopen 事件中获取 websocket 错误【英文标题】:javascript getting a websocket error on onopen event 【发布时间】:2017-05-22 21:47:56 【问题描述】:我收到关于以下内容的错误:
在“WebSocket”上执行“发送”失败:仍处于 CONNECTING 状态。 在发送消息之前,我是否可以检查某个事件以确保套接字已完全连接。
我的代码如下:
this.contextWS = new WebSocket(socketAddress);
this.contextWS.onopen = () =>
console.log('Websocket is open !!!');
this.contextWS.send('payload');
我在这里犯了一个明显的错误吗?
【问题讨论】:
***.com/a/49533457/1359764 【参考方案1】:MDN - WebSocket 描述之后:
当 WebSocket 连接建立时调用的事件监听器 readyState 更改为 OPEN;这表明连接是 准备发送和接收数据。该事件是一个简单的事件 命名为“开放”。
我会使用 onerror 事件处理程序来检查路上是否没有错误..
contextWS.onerror = function (event)
console.log(event.data);
;
... 和 onclose 事件处理程序来检查意外关闭连接的原因:
contextWS.onclose = function(event)
if (event.code == 1000)
console.log('WebSocket closed normally');
else
console.log('WebSocket closed unexpectedly: ' + event.code);
这是所有可能的结果代码的列表 - MDN CloseEvent
您可以尝试将消息排队并在 readyState == 1 时发送。请查看类似问题的答案 - proxy function
【讨论】:
感谢您的回复,我也阅读了 MDN。我仍然不确定如何确保 websocket 完全连接。我看到 onopen 事件被触发,我尝试发送一条消息,这就是我看到错误的时候。唯一可以看到的其他事件是 onerror 和 onclose。两者都不是我需要的 onopen 事件处理程序似乎是正确的去处。我一直以这种方式使用 WebSocket。您能否更新您的示例代码并添加 send() 函数? 我已经更新了答案。有一个类似问题的链接。所描述的方法似乎是合理的。无论如何, onopen 应该像文档所说的那样工作,当事件发生时 readyState == OPEN 。我见过一些人说 onopen 有时会被调用两次——一次用于 readyState == 0,一次用于 readyState == 1。您能否在您的 onopen 处理程序中打印出 readyState ?我很好奇这种行为是否真的发生。 我看到 websocket 马上就关闭了,所以这是核心问题。感谢您为我指明正确的方向。以上是关于javascript 在 onopen 事件中获取 websocket 错误的主要内容,如果未能解决你的问题,请参考以下文章
如何在 websocket onopen 事件中访问 spring mvc 属性值?
Websocket 服务器问题:onOpen 命中客户端,但服务器 websocket 处理程序 OnOpen 和其他事件从未命中
Java websocket在onOpen函数中获取自定义标头
Javascript Websocket onopen未被调用