weboscket 问题和 SpringBoot 返回错误问题
websocket问题:
1、问题引入不知道有没有遇到过这样的问题,自己的websocket在本地运行的很好,没有bug但是,一旦部署到服务器上,就总是会断连,尤其是对于实时通信的共功能,很容易总是断连,最近我就遇到了一样一个问题,由于要写一个群聊功能,因此,大部分信息都是以广播的形式发出的,而这样就会造成一个问题,那就是循环,我使用将所有的在线用户循环遍历,然后逐个发送信息。
2、问题抛出如果是与上述的情况类似,就会出现一个问题,就是,由于代码运行的效率会很快,如果广播的次数多了,会造成并发的情况,而这种情况在本地运行及不太可能出先,而用调试模式调试时,尤于手速太慢,模拟不了计算机的执行的速度,因此很难发现。
3、问题解决明白了原理(由于计算机执行循环的速度太快,导致方法内部模拟了并发的状态,就会出现执行的错误),解决方法也很简单,自己写一个定时器,在信息发送完后,等待10毫秒在执行下一次循环,就可以解决问题。
4、代码如下
//遍历所有用户的 session,向每个用户都发送信息(除了自己)
for (Map.Entry<Integer, Session> s : groupSession){
if(s.getValue() != null && !s.getKey().equals(userId) && s.getValue().isOpen()){
s.getValue().getAsyncRemote().sendText(data);
}
//暂停1毫秒,用于发信息的时间间隔,这个websocket的信息不能并发,而这个for循环不行,速度太快
int i = 0;
while(!MyTime.isOutTime(6,10)) {
i++;
}
}
public static boolean isOutTime(int number,long outTime){
if(currentTime[number] == 0){
currentTime[number] = System.currentTimeMillis();
}
long tempTime = System.currentTimeMillis();
boolean b = tempTime - currentTime[number] > outTime;
if(b){
//如果超时了就还原时间
currentTime[number] = 0L;
}
return b;
}
SpringBoot返回信息错误
1、问题引入在SprngBoot正常运行后,突然就不能运行了,但是代码没有任何问题,控制台也没有Error的错误,但是,接口的返回值就是
{
timestamp: 2024-09-29T00:12:49.856+00:00,
status: 406, error: Not Acceptable,
path: /index/login/loginByUsernameAndPassword
}
2、问题的抛出这是由于返回值类型的属性没有get
方法,访问。
3、解决方法将返回值类型的类全部加上get
方法即可