Autobahn JS订阅管理

时间:2017-03-17 21:33:46

标签: javascript jquery zeromq autobahn ratchet

我正在我们的客户和我们之间建立一个博客,以便他们可以有空间谈论不同的商业交易(每个商业交易都有一个参考编号并拥有它自己的信息)。

现在我能够使用ZeroMQ和Autobahn设置Ratchet来实现这一目标。每当用户更新博客时,订阅它们的其余用户都会将信息推送到他们的浏览器中。

但是,我将订阅方法链接到主页面中的按钮。 (整个想法是他们将点击左侧菜单栏上的参考,博客条目将出现在屏幕的右侧)。

这导致的是,如果用户多次点击相同的引用,或者如果用户转到其他引用然后返回到第一个引用,则只要博客上有更新,用户收到多个更新(每次点击一次 - >每次点击都会触发订阅)。

知道如何防止这种情况发生吗?

以下是创建会话的jquery如何:

$('.reference-container').on('click', function(){
    idReferencia = $(this).attr('id');
    $('#modifyReference').val(idReferencia);

    console.log('Creating connection with server on topic: ' + idReferencia + '..');


    var conn = new ab.Session('wss://plt.prolog-mex.com/wss2/',

        function() {
            conn.subscribe(idReferencia, function(topic, data) {
                $('#messageBoard').prepend('<p class="message-nonown">'+data.article+'</p>')
                console.log('New article published to category "' + topic + '" : ' + data.title);
            });
        },
        function() {
            console.warn('WebSocket connection closed');
        },
        {'skipSubprotocolCheck': true}
    );
    console.log
});

1 个答案:

答案 0 :(得分:1)

您在每次点击按钮时都会在该会话中创建新的WAMP会话和订阅。

你应该做的是检查点击两者是否已经存在,如果是这种情况则不做任何事情。