【问题标题】:How to stop polling in SignalR?如何停止 SignalR 中的轮询?
【发布时间】:2012-04-09 13:20:29
【问题描述】:

有什么方法可以停止 SignalR 中的轮询服务器?如果发生错误,我想停止轮询服务器。轮询集线器以$.connection.hub.start() 开始,所以我认为它可以用$.connection.hub.stop() 或类似的东西停止。但这似乎不起作用,即使在调用stop() 之后轮询仍在继续。还有其他方法可以停止轮询吗?

<script type="text/javascript">

 var chatHub = $.connection.chatHub;
 var connection = $.connection.hub;

chatHub.addMessage = function (message) {
      $('#messages').append('<li>' + message + '</li>');
    };

connection.error(function (error) {
 $('#messages').append('<li>' + "error connecting: closing connnection" + '</li>');
    connection.stop(); //This doesn't seem to work   
        });

connection.start();

</script>

【问题讨论】:

    标签: signalr


    【解决方案1】:

    如果您使用的是集线器,您可以停止集线器的连接:

    $.connection.hub.stop();
    

    【讨论】:

    • 该语法是否已更改为 $.connection.hub.connection.stop()?这就是我的全部工作。
    • 不,它没有。这没有改变
    • 显然我搞混了,很抱歉浪费了您的时间,现在是时候让我了解停止特定集线器上的连接之间的区别了,$.connection.myHub.stop() 和以上.有一个想法,但我想我会设置一个沙盒,所以我知道。
    • 集线器共享一个连接。
    • 如果您不使用集线器怎么办,这是否意味着它无法完成?
    【解决方案2】:

    首先你确定有必要吗?如果发生通信错误,显然您要重试。

    但是,我查看了源代码,我的意思是,尤其是在错误处理程序中,不可能调用 .stop() 命令。分别它没有任何效果,因为在处理函数完成后,通信会在两秒后自动重新初始化。

    参见 jquery.signalR.js(第 340 行):

    $(instance).trigger("onError", [data]);
    
    window.setTimeout(function () {
      poll(instance);
    }, 2 * 1000);
    

    我找到了一种解决方法:在处理函数中抛出异常,导致轮询未重新初始化:

    connection.error(function (error) { //$.connection.hub.error()
      $('#messages').append('<li>' + "error connecting: closing connnection" + '</li>');
      throw "Close SignalR connection";
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-15
      • 1970-01-01
      • 2012-10-12
      • 1970-01-01
      相关资源
      最近更新 更多