Websocket 连接断开 - Apache MQ

Posted

技术标签:

【中文标题】Websocket 连接断开 - Apache MQ【英文标题】:Web Socket Connection Disconnecting - ApacheAMQ 【发布时间】:2014-07-23 16:45:10 【问题描述】:

我正在尝试将 STOMP 与 Apache AMQ 一起使用,因为我希望 Web 套接字能够为我提供比典型的 org.activemq.Amq Ajax 连接更好的性能。

无论如何,我的 activemq 配置文件有正确的条目

    <transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>

我通过以下方式连接到它:

function amqWebSocketConn() 
        var url = "ws://my.ip.address:61614/stomp";
        var client = Stomp.client(url);

        var connect_callback = function() 
            alert('connected to stomp');

            client.subscribe("topic://MY.TOPIC",callback);

            var callback = function(message) 
               if (message.body) 
                    alert("got message with body " + message.body);
                 else  alert("got empty message"); 
            ;
        ;

    client.connect("", "", connect_callback);


当我第一次打开网络浏览器并导航到 http://localhost:8161/admin/connections.jsp 时,它显示以下内容:

Name                                    Remote Address      Active      Slow 
ID:mymachine-58770-1406129136930-4:9    StompSocket_657224557   true    false

不久之后 - 它会自行移除。我还需要其他什么东西,比如心跳来保持连接吗?

使用

                var amq = org.activemq.Amq;
                amq.init(
                    uri : '/myDomain/amq',
                    timeout : 50,
                    clientId : (new Date()).getTime().toString()
                );

为 TCP AJAX 连接保持连接

【问题讨论】:

【参考方案1】:

我也遇到过类似的问题,用这个解决了

client.heartbeat.incoming = 0;
client.heartbeat.outgoing = 0;

您必须在连接之前添加这两行。 即使在此之后,如果没有传入消息,我也会在 5-10 分钟后看到断开连接。为了解决这个问题,你必须实现connect方法的ondisconnect回调。

client.connect('','',connect_callback,function(frame)
//Connection Lost
console.log(frame);
//Reconnect and subscribe again from here
);

这在我的应用程序中成功运行。

【讨论】:

以上是关于Websocket 连接断开 - Apache MQ的主要内容,如果未能解决你的问题,请参考以下文章

socket 用disconnect 断开,再重新连接怎么搞

websocket不断断开连接

C# socket 如何断开连接

连接后立即断开Websocket

WebSocket断开连接时如何重新连接?

HAProxy + WebSocket 断开连接