问题🤕

写课设的时候, 使用websocket 建立连接发送消息, 出现了 以下两种问题

CloseStatus = 1002

image-20231106131744951

  • 遇到这个问题多半是因为 你发送的消息的 时候前端没有对数据进行调整
1
socket.send(JSON.stringify(sendmessage))

JSON.stringify 如果不加上这个就会报错, 我是在写心跳检测的时候, 没有对空的字符串进行 stringify所以导致一打开服务就报错

1
2
3
4
5
6
7
8
9
10
11
12
// 罪魁祸首
function sendHeartbeat() {
setTimeout(function() {
if (socket.readyState === WebSocket.OPEN) {
socket.send(''); // 发送空的心跳包给服务器
//这里修改为 socket.send(JSON.stringify(''))
sendHeartbeat(); // 递归调用发送心跳包函数,以保持连接活跃
} else {
console.log('WebSocket连接已关闭');
}
}, 5000); // 每30秒发送一次心跳包给服务器
}

CloseStatus = 1006

image-20231106131730108

  • 后来发现是自己修改ip地址的时候吧后面的 端口号也给删除了

正确 的websocket 格式 是 ws:// ip地址 + :(端口号) + /xxx, 这样一修改之后就木有这个问题了 。

测试类遇到的问题

  • 在使用了websocket之后, 一启动测试类,就会报错
  • 实际上我们需要在springTest里面 加上这个来排除掉websocket
1
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)