Signalr - kommen mehrere Gruppen
Edit: David Fowler angefordert für den vollständigen code, um zu versuchen, das problem zu replizieren. Hier ist der vollständige code
Zusätzlich zu dem code hier wiedergegeben, ich habe auch gleich ein komplettes Visual-Studio-2010-Lösung zu der folgenden URL
http://www.sendspace.com/file/lfeurf (URL ist jetzt abgelaufen und funktioniert nicht mehr)
Bitte fühlen Sie sich frei zu downloaden und es zu testen.
Hier sind meine Ergebnisse
- Nur eine zusätzliche Gruppe in der Hub-code wird die Anwendung zu arbeiten
gut mit keine Probleme - Zugabe von 2 Gruppen wird entweder aufhören zu signalr aus
arbeiten oder arbeiten nur in eine Richtung. also: die Nachricht wird
übertragen aus dem browser 1 browser 2 aber nicht übertragen werden
mit browser 2 browser 1
Ursprünglichen Frage:
Ich bin mit Signalr-1.0.0-rc1 in einem MVC3-website. Meine Klienten müssen manchmal auch mehreren Gruppen angehören. Hier ist der code, der in meinem Hub und client-side javascript
Client-side javascript-und HTML -
<script type="text/javascript">
//start signalr
var message = $.connection.messageHub;
//Declare a function on the message hub so the server can invoke it
message.client.send = function (message) {
alert(message);
}
//Start the connection and join groups
$.connection.hub.start();
//bind click event of button to invoke send function on server
$(document).ready(function () {
$("#target").click(function () {
message.server.send("Hello from signalr");
});
});
</script>
<button id="target">Click to send message to other clients</button>
Server-side-Hub
public class MessageHub: Hub
{
public Task AddGroups()
{
//add 1st group
Groups.Add(Context.ConnectionId, "foo");
//add 2nd group
return Groups.Add(Context.ConnectionId, "foobar");
}
//this method will be called from the client
public void Send(string message)
{
Clients.OthersInGroup("foobar").send(message);
}
//automatically join groups when client first connects
public override Task OnConnected()
{
return AddGroups();
}
//rejoin groups if client disconnects and then reconnects
public override Task OnReconnected()
{
return AddGroups();
}
}
Den obigen code hinzufügen sollten zwei Gruppen zu jedem client, wenn Sie zuerst eine Verbindung herstellen, aber es funktioniert nicht. Ich trat durch den C# - code mit einem debugger und keine Fehler geworfen werden. Auch ich dont sehen irgendwelche javascript-Fehler mit Chrome die Konsole, aber die Send-Funktion nicht aufgerufen wird, auf den clients. Ich änderte dann die AddGroups () - Methode auf, um nur eine Gruppe, wie unten dargestellt
public Task AddGroups()
{
//dont add first group
//Groups.Add(Context.ConnectionId, "foo");
//add only second group
return Groups.Add(Context.ConnectionId, "foobar");
}
Nun meine Anwendung perfekt funktioniert. Wie füge ich eine zweite Gruppe? Wie es aussieht habe ich das falsch verstanden Beitritt zu mehreren Gruppen. Könnte jemand mir zeigen den rechten Weg, es zu tun?
- Was bedeutet der client-seitige code Aussehen?
- Hinzugefügt client-seitigen code
- Was ist die "bestimmte" Ereignis, das stattfindet und Wann wird es stattfinden. Ich will reproduzieren Sie das problem, und ich möchte den GENAUEN code, den Sie verwenden
- David, ich bearbeitet haben, meine Frage zu den vollständigen code. Außerdem habe ich auch gleich ein VS2010-Projekt demonstriert die Ausgabe auf sendspace.com/file/lfeurf . Sie sollten in der Lage sein zu erstellen, auszuführen und das problem reproduzieren.
- David, halter73 der fix funktioniert perfekt für mich. Ist das ein bug, den Sie beheben können, die in der nächsten Version, oder habe ich das mit OnConnected und OnReconnected in die falsche Richtung?
- Es ist eingereicht und wird derzeit behoben.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Deiner Probleme scheint zu sein, dass
return Groups.Add(Context.ConnectionId, "foobar");
imAddToGroups
ist ein Timeout nach 5 Sekunden. DieTask
zurück vonGroups.Add
nicht abgeschlossen, bis SignalR überprüft, ob der client mit der angegebenenconnectionId
erhalten hat, die Sie zur Gruppe hinzufügen-Befehl. Geschieht dies nicht innerhalb von 5 Sekunden dieTask
ist abgesagt. Es scheint momentan ein bug verhindert das warten aufGroups.Add
innerhalb vonOnConnected
undOnReconnected
.Da sind Sie wieder, die abgebrochen
Task
ausOnConnected
undOnReconnected
, der server verhindern, dass der client eine Verbindung herstellen kann.Problemumgehung ist, zu ignorieren, die
Task
zurück vonGroups.Add
etwa so:MyHub.cs
Javascript: