自学内容网 自学内容网

【无标题】

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方法即可


原文地址:https://blog.csdn.net/practice_warm/article/details/142633684

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!