gpt4 book ai didi

asp.net-mvc - 如何在断开连接的情况下使 SignalR 正常运行

转载 作者:行者123 更新时间:2023-12-02 03:22:30 25 4
gpt4 key购买 nike

我的应用程序经常在糟糕的公司网络(代理、防火墙等)下使用,所以我不能依赖套接字,长轮询实际上是我唯一的选择。这是我对长轮询的最大问题:

  • 长轮询在某个时间点断开
  • 我自动重新连接(根据文档)
  • 用户单击导致集线器方法调用但尚未建立连接的内容 - 发生错误。

  • 有什么方法可以同步集线器方法调用和重新连接,例如:
  • 我叫集线器方法
  • SignalR 发现连接尚未准备好
  • 它等待连接准备就绪并调用集线器方法

  • 现在我没有看到这样的机会,似乎我唯一的选择是切换到令人伤心的 ajax 调用。

    最佳答案

    我是如何处理的:

  • 有一个 isConnected boolean在我的客户端上,以便每当我连接时,我将其设置为 true ,每当我断开连接时,我都会将其设置回 false :
    $.connection.hub.start().fail((err) => { alert(err); }).done(() => this.isConnected = true);
    $.connection.hub.disconnected(() => { this.isConnected = false; });
    $.connection.hub.reconnected(() => { this.isConnected = true; });
  • 现在,就在我调用集线器方法之前,我检查是否 isConnected是真的。如果没有,我尝试启动集线器连接:
    $("#serverButton").click(function(){
    if(this.isConnected==false)
    $.connection.hub.start();
    $.connection.hub.server.serverMethod();

    })

  • 这就是我现在处理此类情况的方式。
    希望这可以帮助。祝你好运!

    更新:实际上在 $.connection.hub 上存在一个属性叫 state您可以在连接期间的每个点访问。

    因此,您可以通过检查 $.connection.hub.state 跳过拥有自己的变量的步骤(尽管我仍然使用它只是为了确定) .
    $.connection.connectionState
    Object {connecting: 0, connected: 1, reconnecting: 2, disconnected: 4}
    $.connection.hub.state的输出是上述整数中的一个整数,但您可以执行以下操作: $.connection.hub.state == $.signalR.connectionState.connected你可以有 bool 值。

    更容易,但每次调用集线器方法时仍然需要检查这一点。

    关于asp.net-mvc - 如何在断开连接的情况下使 SignalR 正常运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32310680/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com