Отправка событий Pusher по частным каналам

1

Я делаю несколько тестов на Pusher, и я создал метод аутентификации для частных каналов, следующих за документами, и auth работает, как и ожидалось.

(docs: https://pusher.com/docs/authenticating_users#implementing_endpoints)

Это сценарий, который я использую для подписки на каналы с использованием JSONP:

<script>
  Pusher.logToConsole = true;
  var pusher = new Pusher('<%= ENV['PUSHER_KEY'] %>', {
    cluster: 'us2',
    encrypted: true,
    authTransport: 'jsonp',
    authEndpoint: '/pusher_jsonp_auth',
  });

  var channel = pusher.subscribe("private-channel_test");
  channel.bind('pusher:subscription_succeeded', function() {
    console.log("PVT channel");
  });
  channel.bind('greet', function(data) {
    console.log(data);
  });
</script>

Канал был правильно подписан, ОК! Сообщения, которые у меня есть на консоли браузера:

Pusher : State changed : connecting -> connected with new socket ID 163.232688
pusher.min.js:8 Pusher : Event sent : {"event":"pusher:subscribe","data":{"auth":"1e38f997c10796c55093:4e9e160585dc7c49da68da98e281860c1461ddf7c1b37688aa2fde581b482093","channel":"private-channel_test"}}
pusher.min.js:8 Pusher : Event recd : {"event":"pusher_internal:subscription_succeeded","data":{},"channel":"private-channel_test"}
home:35 PVT channel

На бэкэнд я вызвал событие на этот канал с помощью socket_id: используя драгоценный камень рубинового толкателя, я отправил такие сообщения:

Pusher.trigger('private-channel_test', 'greet', {greet: 'hello world'}, {socket_id: "163.232688"})

События отправляются OK в Pusher, как показано на консоли Debug:

Изображение 174551

Но события не принимаются в интерфейсе, и функция привязки никогда не запускается при использовании socket_id и Pusher рассматривает эти события как API Messages

Кто-нибудь знает, что я делаю неправильно?

Связан ли этот код или мое понимание так называемых Private Channels не так?

Теги:
pusher

1 ответ

3

Похоже, вы исключаете своего абонента из трансляции, как описано здесь.

Попробуйте удалить четвертый аргумент из вашего триггерного вызова:

Pusher.trigger('private-channel_test', 'greet', {greet: 'hello world'})
  • 0
    leesio Если я сделаю это, я передам событие всем, кто подписан на этот канал. Я хочу, чтобы событие было инициировано непосредственно на одном канале и было гарантировано, что только аутентифицированные пользователи должны получать это событие.
  • 2
    @AndreDurao В вашем примере вы будете транслировать свое событие всем подписчикам, кроме указанного вами сокета! Так как ваш канал является частным, подписаться могут в любом случае только авторизованные пользователи. Боюсь, что нет возможности транслировать событие на отдельную розетку. Если вы хотите транслировать события отдельным клиентам, один из способов сделать это - назначить каждому клиенту свой собственный частный канал.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню