默认
发表评论 5
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
重启服务重启后,客户端一直在重连报错
阅读(13819) | 评论(5 收藏 淘帖
后端重启后,客户端一直在重连报错,后端一直在循环报错,重新登录的用户也无法收到信息,后端判断是否在线的一直是不在线状态,保存为离线的了

无论怎么重启服务都是同样的问题,也无法收到在线信息。如何来清理这些无效的连接呢。
报错信息如下 会话一直是空的,一直在循环,因为客户端登录的比较多
2023-01-31 16:55:27.500 [WARN ] [n.x.m.server.ServerCoreHandler] [IMCORE-unknow]【注意】会话{uid:null}/10.51.121.2:58775被系统close了,但它里面没有存放user_id,它很可能是没有成功合法认证而被提前关闭,从而正常释放资源。
2023-01-31 16:55:27.590 [INFO ] [n.x.m.server.ServerCoreHandler] [IMCORE-tcp]与{uid:null}/10.52.255.141:62108的会话建立(channelActive)了...
2023-01-31 16:55:27.591 [INFO ] [n.x.m.s.processor.LogicProcessor] [IMCORE-tcp]>> 客户端{uid:null}/10.52.255.141:62108发过来的登陆信息内容是:uid=111682、token=7a1d2bb2-4594-4816-87e9-5fdcc2dc3a69、firstLoginTime=1671675303096
2023-01-31 16:55:27.591 [DEBUG] [n.x.m.server.ServerCoreHandler] [IMCORE-tcp]此客户端的Channel抛出了exceptionCaught,原因是:java.net.SocketException: Broken pipe (Write failed),可以提前close掉了哦!
redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketException: Broken pipe (Write failed)
        at redis.clients.jedis.Protocol.sendCommand(Protocol.java:109)
        at redis.clients.jedis.Protocol.sendCommand(Protocol.java:89)
        at redis.clients.jedis.Connection.sendCommand(Connection.java:126)
        at redis.clients.jedis.BinaryClient.exists(BinaryClient.java:138)
        at redis.clients.jedis.Client.exists(Client.java:69)
        at redis.clients.jedis.Jedis.exists(Jedis.java:208)
        at com.im.server.socket.ServerEventListenerImpl.onUserLoginVerify(ServerEventListenerImpl.java:82)
        at net.x52im.mobileimsdk.server.processor.LogicProcessor.processLogin(LogicProcessor.java:209)
        at net.x52im.mobileimsdk.server.ServerCoreHandler.messageReceived(ServerCoreHandler.java:250)
        at net.x52im.mobileimsdk.server.network.tcp.MBTCPClientInboundHandler.channelRead0(MBTCPClientInboundHandler.java:112)
        at net.x52im.mobileimsdk.server.network.tcp.MBTCPClientInboundHandler.channelRead0(MBTCPClientInboundHandler.java:1)
        at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:99)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
        at io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:286)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
        at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:324)
        at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:296)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
        at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
        at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
        at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:163)
        at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:714)
        at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:650)
        at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:576)
        at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493)
        at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
        at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
        at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
        at java.lang.Thread.run(Thread.java:748)
Caused by: java.net.SocketException: Broken pipe (Write failed)



即时通讯网 - 即时通讯开发者社区! 来源: - 即时通讯开发者社区!

上一篇:阿里IM技术分享(十):深度揭密钉钉后端架构的单元化演进之路下一篇:IM通讯协议专题学习(九):手把手教你如何在iOS上从零使用Protobuf
推荐方案
评论 5
客户端是什么端?ios?android?
引用:JackJiang 发表于 2023-02-01 11:05
客户端是什么端?ios?android?

PC端的

说具体一点啊,是RainbowChat-Web网页端?
引用:JackJiang 发表于 2023-02-01 17:20
说具体一点啊,是RainbowChat-Web网页端?

C/S的 用JAVAFX写的客户端呢
服务端重启或网络不稳定的时候,客户端要是没手动关闭程序 重新登录的话 会无限的一直在重连,导致服务器一直在输出错误的日志 也就是上面发的错误信息,因为很多客户端是经常不关机的,这样的情况服务端是否可以清理这些客户端或者不让一直重连呢
引用:cxsoft 发表于 2023-02-02 19:30
C/S的 用JAVAFX写的客户端呢
服务端重启或网络不稳定的时候,客户端要是没手动关闭程序 重新登录的话 会 ...

如果别的端没有这样的问题,那就找你写的这个JavaFX代码逻辑问题
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部