2016-09-13 3 views
1

Ich erstelle ein Chatboard und ich benutze signalR, um Benutzer wissen zu lassen, wenn ein neuer Kommentar zu einem Status/Post hinzugefügt wird.signalR connection.hub Funktion nicht in react Komponente

Ich benutze React und ich habe versucht, Ereignislistener für die Hub-Funktion in verschiedenen Komponenten hinzufügen, in einigen Komponenten funktioniert es, andere nicht.

Dies ist die Nabe:

public class CommentHub : Hub 
{ 
    public void UpdateComments(int postId) 
    { 
     try 
     { 
      var context = GlobalHost.ConnectionManager.GetHubContext<CommentHub>(); 
      context.Clients.All.updateNewComments(postId); 
     } 
     catch (Exception ex) 
     { 
      Log.Error(ex.Message); 
     } 
    } 
} 

ich den Ereignis-Listener in der componentDidMound Funktion aufrufen:

componentDidMount: function() { 
    this.commentUpdateListener(); 
}, 

Und das ist der Ereignis-Listener:

commentUpdateListener: function() { 
    console.log("in the comment update listener!"); 
    var commentHub = $.connection.commentHub; 

    commentHub.client.updateNewComments = function (postId) { 
     console.log("updateNewComments called!"); 
    }; 

    $.connection.hub.start(); 
}, 

ich habe Reagieren Komponente für einen Post/Status, eine Komponente für die "Wand/Newsfeed" und dann habe ich eine Komponente für die "c Box "für jeden Status an der Wand, wo die Kommentare gerendert werden.

Wenn ich den Event-Listener in der Wand-Komponente oder der Post-Komponente platziert, funktioniert es, und die "updateNewComponent" -Funktion wird aufgerufen, aber nicht, wenn ich es in der "Kommentarbox" -Komponente platzieren.

Noch "im Kommentar-Update Listener!" wird protokolliert, egal wo ich den Event-Listener platziere, aber die Hub-Funktion wird nicht immer aufgerufen, und es scheint wichtig zu sein, in welcher Komponente der Event-Listener platziert ist.

Ist der $ .connection.commentHub nicht am Leben? Schließt es? Gibt es einen Grund, warum die Funktion nicht immer aufgerufen wird?

Antwort

0

Sie können die Protokollierung aktivieren, bevor die Nabe-Verbindung wie folgt beginnen:

$.connection.hub.logging = true; 
$.connection.hub.start(); 

Wenn Sie einige Abschaltungen sehen können Sie versuchen, die Verbindung neu zu starten, wenn es geschlossen wird:

$.connection.hub.disconnected(function() { 
    setTimeout(function() { 
     $.connection.hub.start(); 
    }, 5000); // Restart connection after 5 seconds. 
}); 

Weiterführende Literatur: Understanding and Handling Connection Lifetime Events in SignalR

Verwandte Themen