注意:我尝试了很多带有nodejs(RabbitJs和node-amqp)的amqp库,似乎我们无法使用离线消息,因此我使用amqplib
简介:
我需要创建一个具有实时套接字交换的移动后端,而不用担心网络丢失。
我已经进行了一些搜索,似乎使用消息代理是一个好主意。所以我记录了自己并试图实现一些事情。在这里,我使用RabbitMQ
事实是,当我拥有完整可靠的网络连接时,我可以使用不同的队列和交换类型,例如扇出,直接。
我发现了一些有关更改队列类型并将其设置为“durable:true”和“autoDelete:false”的信息,但它似乎不起作用。
我需要离线消息管理来处理任何类型的队列(1到1,1到N等)。
我需要使用socket.io
我写的内容:
var amqp = require('amqplib');
var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server, {'pingTimeout': 10000, 'pingInterval': 5000});
app.get('/', function (req, res) {
res.sendfile(__dirname + '/index.html');
});
server.listen(8888);
amqp.connect('amqp://localhost').then(function (conn, err) {
if (err != null) {
console.log(err);
}
else {
return conn.createChannel().then(function (ch, err) {
if (err != null) {
console.log(err);
}
else {
io.sockets.on('connection', function (socket) {
ch.assertExchange('logs', 'fanout', {durable: false})
.then(function () {
socket.on('message', function (msg) {
ch.publish('logs', '', new Buffer(msg));
});
return ch.assertQueue('', {durable: true, autoDelete: false});
})
.then(function (qok) {
return ch.bindQueue(qok.queue, 'logs', '').then(function () {
return qok.queue;
});
})
.then(function (queue) {
return ch.consume(queue, queueConsumed, {noAck: true});
});
function queueConsumed(msg) {
socket.emit('news', msg.content.toString());
}
});
}
});
}
});
问题
如果知道套接字可以超时,库如何处理脱机消息?显然,它如何处理socket.IO的超时和心跳?
在这个库中,开发人员处理了我在文档中找不到的“频道”。什么是频道?用户连接?
我应该更改什么才能在后端,浏览器和智能手机之间管理强大而良好的离线消息?