2016-09-13 39 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