我在 Node.js 中实现了一个 XMPP 客户端(使用 node-xmpp 模块)来发送和接收来自 Android 客户端的通知:
var xmpp = require('node-xmpp');
var options =
{
type: 'client',
jid: process.env.GCM_PROJECT_ID+'@gcm.googleapis.com',
password: process.env.GCM_PASSWORD,
port: 5235,
host: 'gcm.googleapis.com',
legacySSL: true,
preferred : 'PLAIN'
};
var cl = new xmpp.Client(options);
cl.connection.socket.setKeepAlive(true, 10000);
这是处理“在线”事件的地方:
cl.on('online', function() {
console.log("online");
});
当 Node.js 服务器在本地启动时,一切正常,我能够从 Android 客户端接收上游消息以及向 Android 客户端发送下游消息。但是,当我的网络服务器在 Heroku dyno 上运行时,永远不会触发“在线”事件,因此 XMPP 客户端无法连接,我无法接收上游消息,也无法发送下游消息。
我的实现基于以下要点:https : //gist.github.com/jamesvnz/6756208 它的作者提供了示例 node.js 服务器代码来实现将与 Android 的 Google Cloud Messaging (GCM) 设备集成的 XMPP 服务器到云”消息功能 - CCS。
所以,我不明白为什么 XMPP 客户端在 Heroku 上运行时无法连接,但在 localhost 上运行良好。