SignalR: Hub OnConnected wird nicht aufgerufen, wenn keine Client-Methoden vorhanden sind

Ich schreibe ein Spiel in SignalR. Die Idee ist, dass Sie sich mit Ihrem Laptop verbinden, der als "Display" und dann mit Ihrem Smartphone als "Joystick" verwendet wird. Das gesamte Setup funktioniert sehr gut.

Jetzt, da alles funktioniert, habe ich beschlossen, den Code umzugestalten. Ich erkannte, dass die Beziehung zwischen dem Joystick und dem Display nur in eine Richtung besteht (das Display muss niemals Informationen an den Joystick zurücksenden). Daher habe ich beschlossen, dass ich keine von signalR aufrufbaren Clientfunktionen auf dem Joystick benötige (z. B. gibt es keine Verwendung fürgameHub.client.joyStickMethod() im Joystick js.

Dann entdeckte ich etwas Seltsames

Es stellt sich heraus, dass Hub-Methodepublic override Task OnConnected() dass ich überschreibe, um mit den verschiedenen Arten von Clients (Anzeigen und Joysticks) umzugehen, wird nicht aufgerufen, es sei denn, ich definiere einmyHub.client.clientSideMethod(). Hier ist das Beispiel, mit dem ich es zu tun habe:

        var gameHub = $.connection.gameHub;
        gameHub.client.connection();
        $("#joystick").joystick({
            hub: gameHub
        });

        gameHub.client.activateJoystick = function () { };
        $.connection.hub.qs = "type=joystick&gameId=" + "@Model.Id";
        $.connection.hub.start();   //this will invoke on connected

Sehen Sie diese leere clientseitige Methode? Das ist der Grund, warumOnConnected wird serverseitig aufgerufen. Wenn ich diese Codezeile entferne, wird sie nicht aufgerufen.

        var gameHub = $.connection.gameHub;
        gameHub.client.connection();
        $("#joystick").joystick({
            hub: gameHub 
        });

        //gameHub.client.activateJoystick = function () { };
        $.connection.hub.qs = "type=joystick&gameId=" + "@Model.Id";
        $.connection.hub.start();   //this will invoke on connected

Dies funktioniert nicht, da auf dem Hub keine clientseitige Methode vorhanden ist. Ich kann wohl eine hinzufügenRegistrateJoystickMethode auf dem Hub und nennen Sie das, aber ich denke, dass das Verhalten unerwartet ist. Meine Frage lautet daher:

Gibt es eine Möglichkeit, manuell eine "Verbindung" zum Hub herzustellen, so dass dieOnConnect Methode wird aufgerufen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage