Juggernaut/Socket.io и аутентификация однопользовательской подписки на канал

Я новичок в Node JS и Socket IO, но я слышал о них много хорошего, поэтому я хотел взглянуть на них для использования в качестве системы уведомлений в реальном времени.

В моем сценарии пользователь откроет сокет для прослушивания уведомлений, отправленных пользователю — каждый пользователь откроет соединение со своими СОБСТВЕННЫМИ уведомлениями, а не с «общедоступным» каналом.

var jug = new Juggernaut;
var channel = "/user/" + userId + "/notifications";
jug.subscribe(channel, function(data){
    console.log("Got data: " + data);
});

Так что почти во всех случаях на 1 канал будет подписан 1 пользователь.

У меня есть 2 опасения:

  1. Все примеры Juggernaut, которые я видел, включают в себя несколько клиентов, подписывающихся на 1 канал — это заставляет меня думать, что он не предназначен для использования для общения 1-1.
  2. Есть ли способ добавить аутентификацию, чтобы только указанные пользователи получали сообщение (IE, в настоящее время вошедший в систему пользователь - единственный, кто может подписаться на свой канал уведомлений). Если бы был способ передать дополнительные данные при подписке, этого, вероятно, было бы достаточно (может быть, хешировать идентификатор пользователя и использовать его в качестве токена?).

Есть ли у кого-нибудь опыт работы с Juggernaut, который мог столкнуться с этим сценарием раньше?


person Paul    schedule 13.06.2011    source источник


Ответы (1)


Все примеры Juggernaut, которые я видел, включали несколько клиентов, подписавшихся на 1 канал.

В чем разница между многими подписчиками и одним подписчиком для издателя?

Есть ли способ добавить аутентификацию, чтобы только указанные пользователи получали сообщение

Конечно. Требуйте, чтобы канал имел аутентификацию, и, поскольку он будет осуществляться по идентификатору пользователя, вы уже знаете, что вам нужно для его защиты.

Что касается того, как заставить juggernaut выполнять аутентификацию, похоже, вы можете опубликовать заголовки хоста, чтобы справиться с этим за вас.

person jcolebrand    schedule 13.06.2011
comment
Потенциально может быть МНОГОЕ открытых каналов. Я не уверен, как socket.io или Juggernaut их реализуют, поэтому я был обеспокоен тем, что это может быть проблемой производительности. - person Paul; 14.06.2011
comment
Каждый открытый сокет является источником снижения производительности в целом. Это заложено в вопросе. Вы собираетесь открывать более 1000 сокетов на одном сервере? Это становится темой, где вам нужна система, разработанная для ваших нужд, а не просто то, что я могу поставить на линуксовую коробку и приступить к работе. - person jcolebrand; 14.06.2011