连接耗尽后打开新连接.Google Cloud Messaging

B R*_*Rad 8 java spring-mvc google-cloud-messaging

我对Google Cloud Messaging有些陌生.我们已经使用了几个月,但最近我们收到了"连接耗尽"消息.当发生这种情况时,所有通

谷歌说:https://developer.android.com/google/gcm/ccs.html#response

收到CONNECTION_DRAINING消息时,应立即开始向另一个CCS连接发送消息,必要时打开新连接.但是,您应该保持原始连接处于打开状态并继续接收可能通过连接传递的消息(并确认它们)-CCS将在准备好时处理关闭时启动连接.

我的问题是

  1. 如果我手动打开一个新连接,如果我不关闭现有连接,它如何知道要使用哪个连接?
  2. 如果同时发送6条消息,如何阻止该方法打开6个连接?或者我对此感到困惑?
  3. 为什么连接耗尽?

我很惊讶这在他们的示例代码中尚未发挥作用.它似乎几乎是你需要的一切.代码中是否已经为我完成了,我很想念它?

我的代码中没有main方法,而是将servlet用作触发器.我的连接是这样开始的

@PostConstruct
    public void init() throws Exception{
        try {
            smackCcsClient.connect(Long.parseLong(env.getProperty("gcm.api")), env.getProperty("gcm.key"));
        }catch (IOException e ){
            e.printStackTrace();
        }catch(SmackException e){
            e.printStackTrace();
        }catch(XMPPException e){
            e.printStackTrace();
        }
    }
Run Code Online (Sandbox Code Playgroud)

然而在此之后我再也没有碰过这个连接.我是否正在处理这个错误,是我应该更频繁地触摸的连接还是我需要跟踪的东西?

_______________________在问题之后加上__________________

我在其示例代码中添加了一个连接,以尝试重新初始化连接.它看起来像这样:

if ("CONNECTION_DRAINING".equals(controlType)) {
            connectionDraining = true;
            //Open new connection because old connection will be closing or is already closed.
            try {
                connect(Long.parseLong(env.getProperty("gcm.api")), env.getProperty("gcm.key"));
            } catch (XMPPException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (SmackException e) {
                e.printStackTrace();
            }

        } else {
            logger.log(Level.INFO, "Unrecognized control type: %s. This could happen if new features are " + "added to the CCS protocol.",
                    controlType);
        }
Run Code Online (Sandbox Code Playgroud)

che*_*eou 1

我也是 GCM 新手,面临同样的问题...我通过在 CONNECTION_DRAINING 消息上创建新的 SmackCcsClient() 解决了它。较旧的连接应该仍然存在并接收消息,但不发送,因为:

受保护的易失性布尔连接Draining = true;

Google 表示 CCS 将关闭连接:

CCS 将在准备就绪时处理启动连接关闭。

在 CCS 关闭连接之前,您将能够从两个连接接收消息,但只能使用新连接发送消息。当旧连接关闭时,它应该被销毁,我不确定是否调用垃圾收集器......试图解决这个问题

PS:我对这个答案不是100%确定,但也许它会打开更多的讨论空间。