在 Node 中通过 XMPP 发送消息的最简单方法
可能没有比node-simple-xmpp 更简单的Node XMPP 客户端库了。
在这种情况下,向另一个 Jabber 用户发送消息的最小 Node.js 脚本是:
var xmpp = require('simple-xmpp');
var jid = 'testjs@xmpp.jp';
var pwd = 'xyz';
var server = 'xmpp.jp';
var port = 5222;
xmpp.on('online', function(data) {
console.log('Connected with JID: ' + data.jid.user);
xmpp.send('testjs@007jabber.com', 'hello! time is '+new Date(), false);
});
xmpp.on('error', function(err) {
console.error("error:", JSON.stringify(err));
});
xmpp.connect({
jid: jid,
password: pwd,
host: server,
port: port
});
如果两个帐户从未在一起过,还需要初步“订阅”:
xmpp.subscribe('testjs@007jabber.com');
正如您在 package.json 中看到的 node-simple-xmpp lib 依赖于 [node-xmpp-client] (https://github.com/xmppjs/xmpp.js/tree/node-xmpp/packages/node-xmpp-client)。
与 Google Talk/环聊一起使用
上面的脚本也可以与 Google Talk/Hangouts 一起使用(经过测试),您只需将 xmpp.jpserver 替换为 talk.google.com 并使用 Google 帐户。开启https://myaccount.google.com/lesssecureapps,让Node.js脚本使用谷歌账号登录。
其他 XMPP 库
截至https://npms.io/search?q=node-xmpp,还有一些其他适用于 Node 的 XMPP 客户端库,但几乎所有这些库都依赖于 node-xmpp-client 或仅限于 BOSH 连接(通过 HTTP 轮询)。
对于那些习惯在客户端Strophe.js 的人来说,一个有趣的库似乎是node-strophe。它基于Strophe.js 1.0.2 版,这是一个用于在任何浏览器中运行的应用程序的库。不幸的是,该版本不支持 BOSH(请参阅Strophe.js changelog),websocket 仅从 1.1.0 版本开始可用。
探索没有特定 XMPP 库的替代方案
没有特定 XMPP 库的替代解决方案可以使用 Net module,但在这种情况下,您需要管理所有 XMPP 交互以建立与服务器的连接,请参阅 https://wiki.xmpp.org/web/Programming_XMPP_Clients。
下面是一个非常原始的脚本示例,它尝试使用 Net 模块启动与 Jabber 服务器的连接:
var net = require('net');
var jid = 'testjs@xmpp.jp';
var pwd = 'xyz';
var server = 'xmpp.jp';
var port = 5222;
var msg = '<stream:stream xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" version="1.0" to="'+server+'">';
var client = new net.Socket();
client.connect(port, server, function() {
console.log('Connected');
client.write(msg);
});
client.on('data', function(data) {
console.log('Received: ' + data);
});
您可以在控制台日志中看到 Jabber 服务器的正确答案,但是从那时起就一团糟:您应该开始交换 TLS 消息(请参阅https://xmpp.org/rfcs/rfc3920.html#tls)
结论
我认为唯一可行的选择是第一个使用 node-simple-xmpp 库。