2015-07-07 2 views
0

Я работаю над приложениями реального времени в настоящий момент, что позволяет пользователю добавлять других пользователей в «команду», я хочу уведомить пользователя, которого они добавили в реальном времени. Однако я не могу за жизнь мне работать, как осуществить это, я думаю, что это документация, которая сбивает с толку меня больше всего,pusher client events triggering для пользователя

Пользователь должен быть подписан на канал, что мероприятие вызвало на

Как это возможно? Конечно, из-за того, что я пытаюсь добавить кого-то в группу в реальном времени, и эта группа является уникальным каналом, на который они не могут меня подписывать?

Вот моя попытка и объяснение процесса.

1) Пользователь вступает в приложение и подписывается на уникальный для них канал «presence-user_ {id}», где id - это идентификатор пользователя из базы данных.

2) Пользователь в другом месте хочет, чтобы добавить пользователь в свою группу, избранный пользователь, который запускает следующий код,

App['presence-' + 'user_' + newUser.get('id')] = App.pusher.subscribe('presence-user_' + newUser.get('id')); 
          App['presence-' + 'user_' + newUser.get('id')].trigger('client-user-added', { project : self.model.get('id') }); 

NEWUSER является основой модели детализируя пользовательские данные выбранного пользователя. То, что я пытаюсь сделать здесь, - подписаться на пользователя, который пытается использовать пользователя для группы на этом канале пользователей.

Это должно затем огонь этот метод listenter,

App['presence-' + 'user_' + App.Session.get('user_id')].bind('client-user-added', this.RT_addProject, this); 

Это, в свою очередь, должны уволить в соответствии с методикой по применению добавленным клиентов,

RT_addProject: function(data) { 
    console.log(data); 
}, 

однако это не так. Каков правильный метод запуска клиентских событий?

TLDR; Я хочу уведомить пользователя в режиме реального времени, когда они добавляются в группу с помощью толкателя.

ответ

1

Там ключевые моменты в presence channels являются:

  1. Название канала присутствия должны быть разделены между пользователями, которые вы хотите присоединиться к группе - акт подписавшись на канал добавляет их в канал.
  2. Каждому пользователю требуется уникальный идентификатор, который вы передаете через ваш сервер (возможно, идентификатор сеанса пользователя) через auth callback. Это однозначно идентифицирует их на канале.
  3. Если аутентификация прошла успешно, они подписаны. После подписки клиент получает начальный список существующих пользователей на канале через событие pusher:subscription_succeeded.
  4. Существующие абоненты канала уведомлены о наличии новых пользователей через pusher:member_added событий.
  5. Когда пользователи переходят в автономный режим (закрытие браузера, перемещение между страницами или отмена подписки по коду), всем другим пользователям канала сообщается, что пользователь покинул канал через события pusher:member_removed.

Например.На клиенте:

var pusher = new Pusher(APP_KEY); 
var chatChannel = pusher.subscribe('presence-chat'); 

chatChannel.bind('pusher:subscription_succeeded', function(members) { 
    members.each(memberAdded); 
}); 
chatChannel.bind('pusher:member_added', memberAdded); 
chatChannel.bind('pusher:member_removed', memberRemoved); 

function memberAdded(member) { 
    // add to UI etc. 
} 

function memberRemoved(member) { 
    // remove from UI etc. 
} 

Акт подписавшись результатов в библиотеке Толкатель JS делая auth POST request на сервере конечной точки.

Сервер псевдо-код:

var channelName = authRequest.postParam['channel-name']; 
var socketId = authRequest.postParam['socket-id']; 

var pusher = new Pusher(YOUR_CREDENTIALS); 

if(currentSessionUserAllowedToSubscribeToChannel(channelName) ) { 
    var uniqueUserId = getCurrentSessionUserUniqueId(); 
    var customUserInfo = getCustomUserInfo(); 
    var authSignature = pusher.presence_auth(channelName, 
             uniqueUserId, 
             customUserInfo); 

    send200AuthJSONToClient(authSignature); 
} 
else { 
    send401ToClient(); 
} 

Что такое правильный способ запуска события клиента?

Клиентские события могут быть вызваны только на частных или наличие каналов после того, как подписка удалось:

var pusher = new Pusher(APP_KEY); 
var chatChannel = pusher.subscribe('presence-chat'); 

chatChannel.bind('pusher:subscription_succeeded', function() { 
    var wasTriggered = pusher.trigger('client-event', {some: 'data'}); 
    console.log(wasTriggered); 
}); 

TLDR; Я хочу уведомить пользователя в режиме реального времени, когда они добавляются в группу с помощью толкателя.

Если пользовательA хочет, чтобы пользователь B присоединился к каналуX, тогда вам нужно сообщить пользователю о существовании channelX, чтобы они могли подписаться на него.

пользователь может принимать события только по каналам, на которые они подписаны. Таким образом, userA как-то нужно отправить событие на канал, о котором знает пользовательB. Общим решением для этого является наличие каждого канала пользователя, например. userA-notifications и пользователюA необходимо инициировать событие на этом канале через сервер. В конечном итоге вам нужен авторитет, чтобы остановить нежелательные события от запуска.

Этот ответ имеет отношение к способу, описанному выше: https://stackoverflow.com/a/28165893/39904

+0

Спасибо за это, это немного помочь, но я не уверен, что я 100% ясно, на мой первоначальный вопрос. Пользователь является членом команды, другой пользователь понятия не имеет, что команда существует - имя этой группы также является именем канала, как добавить пользователя к каналу, который по существу не существует для них? – Udders

+0

Я добавил разъяснения о запуске событий клиента и добавил некоторую информацию об уведомлении пользователей. – leggetter

+0

Belter! Огромное спасибо. – Udders

 Смежные вопросы

  • Нет связанных вопросов^_^