使用 XMPP 关闭 GCM 连接服务器的套接字

Posted

技术标签:

【中文标题】使用 XMPP 关闭 GCM 连接服务器的套接字【英文标题】:Socket closed to GCM connection server using XMPP 【发布时间】:2016-09-20 19:31:39 【问题描述】:

我有一个用 Erlang 编写的简单应用服务器,它使用 XMPP 发送下游消息。客户端应用程序应为 android 设备。我的 Erlang 模块实现了gen_server 行为;在init 上,它使用 XMPP 连接到 GCM 连接服务器 (CCS), 它有一个导出函数来发送下游消息。

问题是当我尝试发送消息时 SSL 套接字被关闭。如果我不发送任何消息,套接字将在 20 秒内关闭。

身份验证成功完成,我收到<success xmlns="urn:ietf:params:xml:ns:xmpp-sasl"/> 响应。发送消息后没有 ACK 消息,套接字立即关闭。

代码可用here。这是一个使用 rebar3 的 Erlang 项目。

我在这里缺少什么?为什么我的套接字连接被关闭了?

【问题讨论】:

我不确定在init函数中打开socket是否可以。通常,主管启动所有gen_servers 的时间有限。看看他们在这个例子中是如何做到的:github.com/erlware/Erlang-and-OTP-in-Action-Source/blob/master/… 【参考方案1】:

通过在身份验证后发送额外的节来解决问题。查看问题中上面提到的链接的代码,看看应该交换哪些节才能发送通知。

GCM CCS docs 缺少此信息,因此出现了问题。

【讨论】:

以上是关于使用 XMPP 关闭 GCM 连接服务器的套接字的主要内容,如果未能解决你的问题,请参考以下文章

GCM,我怎么知道 XMPP 数据包的结束?

是否可以将 GCM 云连接服务器 (XMPP) 与 Heroku 应用程序一起使用?

使用 HTTP 和 XMPP 协议的 GCM/FCM 推送通知

一个 XMPP 连接用于多个 GCM/FCM 应用程序

如何构建对 GCM 云连接服务器 (XMPP) 的通知密钥请求?

构建 Android XMPP 即时通讯工具和服务器示例 [关闭]