2011-12-26 9 views
2

В настоящее время я играю с Faye.js. После подписки на канал я хочу, чтобы этот конкретный клиент получил объект, который не имеет отношения ни к кому уже в канале.Отправка данных конкретному клиенту, а не всему каналу

Как это можно достичь?

Подробнее: Объект представляет собой массив из последних 20 комментариев чата в комнате. Любой, кто уже в комнате, получил бы этот объект уже или был частью чатов, и поэтому не требуется, чтобы они его получали.

Заранее спасибо.

ответ

1

Единственный способ, с которым я столкнулся, - создать GUID на стороне клиента. Когда клиент подключается, он объявляет себя другим через «общедоступный» канал, затем вы можете использовать GUID для отправки сообщений непосредственно этому клиенту.

Например, возьмите кусок кода из ответа this previous question, чтобы сгенерировать что-то похожее на UUID.

Вы можете сделать что-то на стороне клиента, как это:

var guid = guidGenerator(); 
client.subscribe('/privChannel_' + guid, onPrivateMessage); 
client.subscribe('/pubChannel', onPublicMessage); 
client.publish('/announce', { 'myId': guid }); 

function onPrivateMessage() { 
// do something 
}; 

function onPublicMessage() { 
// do something 
}; 

Ваш сервер должен всегда подписаться на канал «/ объявляет», и когда сообщение опубликовано в этом канале он должен хранить, что id, чтобы он мог идентифицировать конкретного клиента. Затем сервер может использовать этот идентификатор для публикации на канал, на который должен быть подписан только этот клиент.

Обратите внимание, что это не очень хорошая идея для конфиденциальных данных. Другие клиенты также могут подписаться на «/ announce» и управлять контентом для вредоносных целей.

+0

Благодарим вас за ответ. Есть ли у вас примеры, связанные с использованием GUID для каждого клиента? – Julio

+0

Я добавил еще несколько слов, надеюсь, что это прояснит для вас. –