【问题标题】:Reconnecting a connection subscribed to a hub causes immediate disconnection重新连接订阅到集线器的连接会导致立即断开连接
【发布时间】:2012-09-25 14:25:13
【问题描述】:

采取以下控制台应用程序

    static void Main(string[] args)
    {
        Thread connector = new Thread(Connector);
        connector.Start();

        while (true)
        {
            Thread.Sleep(500);
        }
    }

    private static void Connector()
    {
        SignalR.Client.Hubs.HubConnection connection = new SignalR.Client.Hubs.HubConnection("http://192.168.42.10:1327/Chat");

        SignalR.Client.Hubs.IHubProxy loginHub = connection.CreateProxy("LoginHub");

        connection.Received += connection_Received;
        connection.Reconnected += connection_Reconnected;
        connection.StateChanged += connection_StateChanged;
        connection.Error += connection_Error;
        connection.Closed += connection_Closed;

        connection.Start().Wait();
    }

LoginHub 实现 IDisconnect。

如果我启动应用程序,让它连接,拉网线,等待服务器端断开事件触发,重新连接网线,客户端将重新连接,然后立即关闭其连接。

如果我在服务器端断开连接触发之前拔下并重新插入网络电缆,连接重新连接就好了。

这是预期的行为吗?重新连接应该如何工作?

【问题讨论】:

    标签: c# signalr


    【解决方案1】:

    已编辑(重新阅读并发现我并不清楚):当客户端立即与 SSE 断开连接时,在大多数情况下(在 0.5.3 中)它将陷入无限重新连接循环(请参阅下面的错误)。

    但是,在某些情况下,它会重新连接,然后立即断开连接,这是故意行为。我们之所以强制客户端断开连接,是因为此时服务器已经完全忘记了客户端。因此客户端需要通过 $.connection.hub.start 等重新实例化它的连接。

    在下一个版本中,我们修复了无限重新连接问题,并在流程中添加了“警告”,以通知开发人员服务器可能已关闭 (onConnectionSlow)。如果您成功重新连接并且服务器忘记了您,您将被告知然后断开连接。

    以下是对该错误的引用: https://github.com/SignalR/SignalR/issues/687

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-24
      • 1970-01-01
      • 1970-01-01
      • 2012-08-07
      • 2020-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多