2016-09-13 40 views
1

我創建了一個聊天板,我使用signalR讓用戶知道何時在某個狀態/帖子上添加新評論。signalR connection.hub函數未在響應組件中調用

我正在使用React,並且我嘗試在不同的組件中添加事件監聽器,而不是其他組件。

這是樞紐:

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); 
     } 
    } 
} 

我呼籲在componentDidMound函數的事件監聽器:

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

這是事件監聽器:

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(); 
}, 

我有一個對帖子/狀態作出反應的組件,「牆/新聞源」的組件,然後我有一個組件「c省略框「,用於牆上的每個狀態,其中評論被呈現。

當我將事件監聽器放置在牆組件或其後組件中時,它會調用'updateNewComponent'函數,但不會在將它放入「評論框」組件中。

仍然「在評論更新監聽器!」中無論我放置事件偵聽器的位置如何,都會記錄日誌,但中樞函數並不總是被調用,並且它似乎與事件偵聽器放置的響應組件有關係。

$ .connection.commentHub是不是還活着嗎?它關閉了嗎? 是否有某些原因,函數並不總是被調用?

回答

0

您可以在啓動集線器的連接,如在此之前啓用日誌記錄:

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

如果你看到一些斷線,你可以嘗試當它關閉,以重新啓動連接:

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

延伸閱讀:Understanding and Handling Connection Lifetime Events in SignalR