Squaremo amqplib离线消息

时间:2015-03-17 12:58:33

标签: javascript node.js socket.io rabbitmq amqp

注意:我尝试了很多带有nodejs(RabbitJsnode-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的超时和心跳?

  • 在这个库中,开发人员处理了我在文档中找不到的“频道”。什么是频道?用户连接?

  • 我应该更改什么才能在后端,浏览器和智能手机之间管理强大而良好的离线消息?

0 个答案:

没有答案