Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 1293|回复: 0

[默认分类] WebSocket客户端连接不上和掉线的问题以及解决方案

[复制链接]
  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2020-8-4 09:04:52 | 显示全部楼层 |阅读模式
    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: justify; font: 12.0px SimSun }
    p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: justify; font: 12.0px Cambria; min-height: 14.0px }
    p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: justify; font: 12.0px SimSun; color: #626262; min-height: 14.0px }
    p.p4 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: justify; font: 12.0px SimSun; color: #626262 }
    p.p5 { margin: 6.0px 0.0px 12.0px 0.0px; line-height: 27.0px; font: 12.0px SimSun }
    p.p6 { margin: 0.0px 0.0px 12.0px 0.0px; text-align: justify; line-height: 19.5px; font: 12.0px SimSun }
    p.p7 { margin: 0.0px 0.0px 12.0px 0.0px; text-align: justify; line-height: 19.5px; font: 12.0px Cambria }
    p.p8 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px SimSun; color: #626262 }
    p.p9 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px SimSun; min-height: 14.0px }
    p.p10 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: justify; font: 12.0px SimSun; color: #0433ff }
    span.s1 { font: 12.0px Cambria }
    span.s2 { color: #626262 }
    span.s3 { font: 12.0px Cambria; color: #626262 }
    span.s4 { }
    span.s5 { font: 12.0px Cambria }
    span.s6 { font: 12.0px Times }
    span.s7 { font: 12.0px SimSun }
    span.s8 { font: 10.0px Times }
    span.s9 { color: #000000 }
    span.s10 { text-decoration: underline }
    看到最近有很多人在blog上问关于WebSocket客户端连接和掉线的问题,有一部分我以前也遇到过,在这里我罗列了一些我以前遇到过的问题和其他简单的WebSocket服务。
       
    Q1 客户端连接不上的问题
       这个问题我遇到的基本集中在后端,遇到的话需要收集日志进行分析,首先要查看是因为什么原因出现问题的,不过这种情况下多半会出现Exception,从Exception着手分析问题即可。
      
    Q2 1客户端掉线问题
       这里所指的客户端掉线的问题是指客户端非正常掉线。有的时候会出现Exception,通过处理Exception即可关闭连接,有的时候像客户端突然网络离线的情况下,这个时候后台没有收到客户端发来的close frame,会认为这个客户端还是处在在线的情况。那这个问题可以通过心跳包的问题解决。也可以通过客户端向服务器发心跳包,也可以服务器发送心跳包至客户端。我们最终采用的方案是客户端向服务端发送心跳包,服务端收到心跳包后会检测当前websocket session队列中是否存在同属性的websocket session,有的话关闭以前的session即可。我个人认为还是服务端像客户端发送心跳包好一些,但这样做要注意性能问题。
      
    Q3 websocket连接后1分钟自动断开关闭
       这是因为websocket长连接有默认的超时时间(1分钟,由proxy_read_timeout决定),就是超过一定的时间没有发送任何消息,连接会自动断开。解决办法就是让浏览器每隔一定时间(要小于超时时间)发送一个心跳。代码如下:
    window.setInterval(function(){ //每隔5秒钟发送一次心跳,避免websocket连接因超时而自动断开
    var ping = {"type":"ping"};
    ws.send(JSON.stringify(ping));
    },5000);
      
    Q4 能收到客户端消息,后台也显示发送,但是客户端收不到
        这个问题经我个人观察和猜测,应该是websocketsession没有成功关闭或者成功关闭但是和一个websocketsession对应多个session有关,因为我把上面的问题解决了之后,这个问题也没出现过了。
      
       最近因为工作需求较多,又有新项目要进来,项目周期太紧了,经过团队商量,自己开发WebSocket这一块,要做稳定成本太高了,所以我们决定使用第三方的WebSocket服务,经过我们对比多个第三方服务,最终发现了一个Java Websocket神器叫GoEasy,相比较其他的三方,我觉得这个上手更加简单,对各种浏览器的兼容也非常好。用到现在也没有什么问题,你们有兴趣的可以去试一下。
       网址:http://www.goeasy.io
       希望我遇到的问题以及解决方案对你们有所帮助。
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-4-20 04:41 , Processed in 0.422261 second(s), 38 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表