Pusher не улавливает вызванное событие, так как с 6 сентября 2018 года в Laravel произошла смена TLS. - PullRequest
0 голосов
/ 06 сентября 2018

Pusher не перехватывает сработавшее событие, поскольку с 6 сентября 2018 года произошла смена TLS. Он не выдает ни одной ошибки на консоли, когда я открываю страницу, содержащую клиентский JavaScript-код пушера, он показывает, что каналы подключены к серверу-пушеру, но когда я запускаю любой из них, он не отвечает и не выдает никакой ошибки. Просто это не вызов обратного вызова события связывания вообще. Вот уменьшенный файл pusher.js, который я включил.

<script src="https://js.pusher.com/4.3/pusher.min.js"></script>

И это код события JS на стороне клиента.

var notificationsWrapper   = $('.dropdown-notifications');
var notificationsToggle    = notificationsWrapper.find('a[data-toggle]');
var notificationsCountElem = notificationsToggle.find('i[data-count]');
var notificationsCount     = parseInt(notificationsCountElem.data('count'));
var notifications          = notificationsWrapper.find('ul.dropdown-menu');

if (notificationsCount <= 0) {
  notificationsWrapper.hide();
}

// Enable pusher logging - don't include this in production
Pusher.logToConsole = true;
var pusher = new Pusher('AppKey', {
  cluster: 'ap2',
  forceTLS: true
});
// Subscribe to the channel we specified in our Laravel Event
var channel = pusher.subscribe('subscribed');
channel.bind('pusher:subscription_succeeded', function(members) {
    console.log('subscribed successful') ;
});
channel.bind('pusher:subscription_error', function(status) {
    console.log('subscribed error: '+ status) ;
});
channel.bind('theEvent', function(data) {
  var existingNotifications = notifications.html();
  var avatar = Math.floor(Math.random() * (71 - 20 + 1)) + 20;
  var newNotificationHtml = `
    <li class="notification active">
        <div class="media">
          <div class="media-left">
            <div class="media-object">
              <img src="https://api.adorable.io/avatars/71/`+avatar+`.png" class="img-circle" alt="50x50" style="width: 50px; height: 50px;">
            </div>
          </div>
          <div class="media-body">
            <strong class="notification-title">`+data.type+`</strong>
            <!--p class="notification-desc">Extra description can go here</p-->
            <div class="notification-meta">
              <small class="timestamp">`+data.date_time+`</small>
            </div>
          </div>
        </div>
    </li>
  `;
  notifications.html(newNotificationHtml + existingNotifications);
  notificationsCount += 1;
  notificationsCountElem.attr('data-count', notificationsCount);
  notificationsWrapper.find('.notif-count').text(notificationsCount);
  notificationsWrapper.show();

  $.playSound('/notification/notification.mp3') ;
});

Здесь я вызываю триггер в контроллере laravel.

        $pusher = HomeController::getPusher() ;
        $pusher->trigger('subscribed', 'theEvent', $callBack);

Эти две строки находятся в функции, которая вызывается, если конкретный маршрут вызывается и выполняется до того, как контроллер откроет представление. и экземпляр Pusher создается со ссылкой на Home Controller. и обе функции маршрута и ниже функции толкателя находятся в Home Controller.

public function getPusher() {
    $options = array(
        'cluster' => 'ap2',
        'useTLS' => true
      );
      $pusher = new Pusher(
        'AppKey',
        'AppSecret',
        'AppId',
        $options
      );

    return $pusher ;
}

1 Ответ

0 голосов
/ 06 сентября 2018

У вас есть такая же проблема, если вы просто продолжаете использовать encrypted:true, как я предполагаю, что вы делали раньше?

Я помогаю поддерживать эту библиотеку и буду исследовать это. Пока что в нашей инфраструктуре, касающейся TLS, изменений не было - это изменение было просто переименованием переменной. Тем временем вы можете использовать более старую версию библиотеки, чтобы избежать этого. Я вернусь к вам, как только смогу!

...