WAMP - AutobahnJS:刷新页面时的多个订阅

时间:2015-12-10 02:29:35

标签: javascript autobahn crossbar wamp-protocol

我使用Crossbar作为WAMP路由器并发布订阅并在网页前端呈现的事件。

从前端开始,我首先打电话告诉后端开始发布信息。然后我订阅了这个主题。

编辑这里的想法是我想从后端发布信息以查看前端,但不需要一直发布它。因此,当页面加载时,我想发送一条消息告诉它开始发布,然后在不再需要时停止它。

这是前端代码的相关部分。

function connect() {
    var connection = new autobahn.Connection(
        {
            url: "ws://com.example.wamp:8765/ws",
            realm: "info"
        });

    connection.onopen = function (session) {
        // ...
        session.call("com.example.startPublish");
        // ...        
        session.subscribe("com.example.info", onInfo);
        // ...
    };

    connection.onclose = function (reason, details) {
        // ...
        session.unsubscribe("com.example.info");
        // ...
    };

    connection.open();
}

$(function() {
    connect();
});

function onInfo(args, kwargs) {
    $(".info").text(kwargs.info);
}

在后端我做了一些处理来获取信息并发布它。这是后端代码:

var publishInfoInterval = null;
var session;

var connection = new autobahn.Connection(
    {
        url: "ws://com.example.wamp:8765/ws",
        realm: "info"
    });

function getInfo() {
    // ...
    return duration;
}

function publishInfo() {
    publishInfoInterval = setInterval(function() {
        session.publish("com.example.info", [], {
            "info": getInfo(),
        });
    }, 10000);
}

function startPublish() {
    publishInfo();
}

function stopPublish() {
    clearIntervals();
}

function clearIntervals() {
    if(publishInfoInterval) {
        clearInterval(publishInfoInterval);
        publishInfoInterval = null;
    }
}

connection.onopen = function(sess) {
    session = sess;
    sess.register("com.example.startPublish", startPublish).then(
        function() {
            console.log("Registered startPublish");
        }
    );

    sess.register("com.example.stopPublish", stopPublish).then(
        function() {
            console.log("Registered stopPublish");
        }
    );
};

connection.onclose = function(reason, details) {
    clearIntervals();
};

connection.open();

我遇到的问题是,当我刷新页面时,它会创建一个新的订阅。但原始订阅仍然发布相同的信息。所以在刷新页面之后,我已经双重订阅了。

我想知道处理这个问题的最佳方法是什么。

0 个答案:

没有答案