2016-09-13 3 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(); 
}, 

У меня есть реагировать на компонент/должность, компонент для "wall/newsfeed", а затем у меня есть компонент для "c omment box "для каждого статуса на стене, где отображаются комментарии.

Когда я помещаю прослушиватель событий в компонент стены или компонент post, он работает, и функция «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