无法使用 Node.js + XMPP 接收上游 GCM 消息

Posted

技术标签:

【中文标题】无法使用 Node.js + XMPP 接收上游 GCM 消息【英文标题】:Unable to receive upstream GCM messages with Node.js + XMPP 【发布时间】:2015-06-12 16:18:20 【问题描述】:

我是 node.js 和 XMPP 的新手,但不是 javascript 或 GCM。我无法使用node-xmpp 接收上游消息,并且没有调用任何回调,甚至没有调用error。我查看了其他 SO 线程,但没有一个解决方案有效。这是我的整个路线:

var express = require('express');
var router = express.Router();
var xmpp = require('node-xmpp');

router.get('/', function(req, res, next) 

  var options = 
    type: 'client',
    jid: 'project-12345@gcm.googleapis.com',
    password: 'apiKey12345',
    port: 5235,
    host: 'gcm.googleapis.com',
    legacySSL: true,
    preferredSaslMechanism : 'PLAIN'
  ;

  // this prints correctly
  console.log('Creating xmpp app');

  var cl = new xmpp.Client(options);
  cl.connection.socket.setTimeout(0);
  cl.connection.socket.setKeepAlive(true, 10000);

  // None of these callbacks are called
  cl.on('online', function() 
    console.log('online');
  );

  cl.on('connection', function() 
    console.log('online');
  );

  cl.on('authenticate', function(opts, cb) 
    console.log('authenticated');
  );

  cl.on('error',function(e) 
    console.error(e);
  );

  cl.on('stanza', function(stanza) 
    console.log(stanza);
  );

  res.render('index',  title: 'GCM upstream test' );
);

module.exports = router;

谢谢

【问题讨论】:

有两个问题:1)您在 express.js 服务器中运行 XMPP 客户端,这意味着 XMPP 客户端套接字仅在您向 / 发出请求后才会被初始化,而不是在您启动服务器后. 2) 我在没有 express.js 的情况下进行了测试,并且 node-xmpp-client 中的代码不起作用。我尝试运行 DEBUG=xmpp:client:session,xmpp:client node ccs.js 以从库中获取一些日志记录/调试,但只得到“Creating xmpp app xmpp:client:session start socket connection +0ms” ,然后我从应用程序发送了一条上游消息,但在服务器上我什么也看不到。 我认为***.com/questions/22566024/… 是一个相关问题。您必须调试 node-xmpp-client 库并确定问题所在。 【参考方案1】:

此处的操作:问题是因为路由在到达 res.render 时终止了 XMPP 操作。从路由中删除 XMPP 代码后,我得到一个 XMPP authentication failure,这很可能是由于不正确的 jid/密码。项目需求发生了变化,我不再需要上游消息传递,因此我不会尝试修复身份验证失败。 感谢回复

【讨论】:

以上是关于无法使用 Node.js + XMPP 接收上游 GCM 消息的主要内容,如果未能解决你的问题,请参考以下文章

我可以通过 Firebase Admin SDK 接收来自设备的上游消息,而无需在应用程序服务器上实现 XMPP

XMPP BOSH 预绑定返回 SID 和 RID 的 Node.js 解决方案

发送 GCM 上游消息后收到空推送消息

套接字、xmpp 和对 node.js 的轮询 - 高性能和服务器友好

我们能否仅借助 FCM 而无需 Xmpp 来演示上游消息传递? [关闭]

如何在 node.js 中使用 stroph.js 服务器端