GCM连接重置

时间:2018-08-17 06:35:54

标签: java firebase sockets google-cloud-messaging smack

我们使用smack库来建立与GCM的XMPP连接。我已经在应用程序上建立了很多连接,并且已经实现了Smack库的ConnectionListener类。因此,我们使用以下方法。

@Override
public void connectionClosedOnError(Exception e) {
    logger.error(e, "connectionListener::connectionClosedOnError::appKey::{}::clientId::{}", appKey, clientId);
}

此实现已经运行了很长时间。但是最近两天我们遇到了这样的错误;

05:16:50,846 ERROR [CcsClient   ] - 
connectionListener::connectionClosedOnError
::appKey::xxx::clientId::xxxx
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:196)
at java.net.SocketInputStream.read(SocketInputStream.java:122)
at sun.security.ssl.InputRecord.readFully(InputRecord.java:442)
at sun.security.ssl.InputRecord.read(InputRecord.java:480)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:934)
at sun.security.ssl.SSLSocketImpl.
readDataRecord(SSLSocketImpl.java:891)
at sun.security.ssl.AppInputStream.read(AppInputStream.java:102)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:283)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:325)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:177)
at java.io.InputStreamReader.read(InputStreamReader.java:184)
at java.io.BufferedReader.fill(BufferedReader.java:154)
at java.io.BufferedReader.read1(BufferedReader.java:205)
at java.io.BufferedReader.read(BufferedReader.java:279)
at org.xmlpull.mxp1.MXParser.fillBuf(MXParser.java:2992)
at org.xmlpull.mxp1.MXParser.more(MXParser.java:3046)
at org.xmlpull.mxp1.MXParser.nextImpl(MXParser.java:1144)
at org.xmlpull.mxp1.MXParser.next(MXParser.java:1093)
at org.jivesoftware.smack.PacketReader.
parsePackets(PacketReader.java:312)
at org.jivesoftware.smack.PacketReader.access$000(PacketReader.java:48)
at org.jivesoftware.smack.PacketReader$1.run(PacketReader.java:76)

这是什么原因?

1 个答案:

答案 0 :(得分:0)

我找到了问题的根源。我们正在打开许多与GCM的套接字​​连接,以发出通知。根据我们的服务提供商设置的规则,我们的套接字连接将在10分钟后关闭。但是服务提供商的关闭方法会导致错误。

然后smack调用 connectionListener :: connectionClosedOnError 方法,并尝试重新连接到GCM。但是当服务负载很重时,它是如此昂贵。