signalR connection.hub函数未在react组件中调用

时间:2016-09-13 20:14:24

标签: reactjs signalr signalr-hub

我正在创建一个聊天板,我正在使用signalR让用户知道在某些状态/帖子上添加新评论的时间。

我正在使用React,我尝试在不同的组件中为hub功能添加事件监听器,在某些组件中它可以工作,而不是其他组件。

这是枢纽:

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

我有一个帖子/状态的反应组件,一个“墙/新闻源”的组件,然后我有一个组件用于“评论框”,用于墙上的每个状态,其中提供了评论。

当我将事件监听器放在wall组件或它工作的post组件中时,会调用'updateNewComponent'函数,但是当我将它放在“comment box”组件中时不会。

仍在“评论更新监听器中!”无论我放置事件监听器的位置都会记录,但是并不总是调用hub函数,并且事件监听器放置在什么react组件中似乎很重要。

$ .connection.commentHub是不是还活着?它关闭了吗? 是否有某些原因不能一直调用该函数?

1 个答案:

答案 0 :(得分:1)

您可以在启动集线器连接之前启用日志记录,如下所示:

$.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