1

采取以下控制台应用程序

    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。

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

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

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

4

1 回答 1

2

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

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

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

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

于 2012-09-27T17:11:31.307 回答