Отправка данных конкретному клиенту, а не всему каналу - PullRequest
2 голосов
/ 26 декабря 2011

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

Как этого достичь?

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

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

1 Ответ

1 голос
/ 27 декабря 2011

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

Например, взять фрагмент кода из ответа этот предыдущий вопрос , чтобы сгенерировать что-то, похожее на 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
};

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

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

...