我是react js开发新手,尝试将websocket集成到我的应用程序中。
但在连接过程中发送消息时出错。
我的代码是
const url = `${wsApi}/ws/chat/${localStorage.getItem("sID")}/${id}/`;
const ws = new WebSocket(url);
ws.onopen = (e) => {
console.log("connect");
};
ws.onmessage = (e) => {
const msgRes = JSON.parse(e.data);
setTextMessage(msgRes.type);
// if (msgRes.success === true) {
// setApiMessagesResponse(msgRes);
// }
console.log(msgRes);
};
// apiMessagesList.push(apiMessagesResponse);
// console.log("message response", apiMessagesResponse);
ws.onclose = (e) => {
console.log("disconnect");
};
ws.onerror = (e) => {
console.log("error");
};
const handleSend = () => {
console.log(message);
ws.send(message);
};
我犯了这个错误
Failed to execute 'send' on 'WebSocket': Still in CONNECTING state
2条答案
按热度按时间u59ebvdq1#
听起来你在打电话
ws.send
在套接字完成连接过程之前。你需要等一等open
事件/回调,或检查readyState
每个文档,并在readyState
更改,即在open
回调已启动。不是建议你这样做,但这可能会有帮助:
正如洛根提到的,我的第一个例子是懒惰。我只是想让op解锁,我相信读者们足够聪明,能够理解如何从那里开始。因此,请确保适当地处理可用状态,例如,如果
readyState
是WebSocket.CONNECTING
然后注册一个侦听器:w41d8nur2#
我猜只有当数据已经打开时,才可以使用ws发送数据,并且不检查数据是否打开。
基本上,您要求打开,但您在服务器说它已打开之前发送了一条消息(这不是即时消息,您不知道需要多少时间;)
我想你应该添加一个变量,比如
let open = false;
并重写onopen然后在您的逻辑中,您只能在open等于true时发送消息
不要忘记错误处理;)