我正在创建一个聊天板,我正在使用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是不是还活着?它关闭了吗? 是否有某些原因不能一直调用该函数?
答案 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