Ответы пользователя по тегу ВКонтакте
  • Как организована система оповещений а-ля Вконтакте?

    goshakkk_reborn
    @goshakkk_reborn
    Скорее паттерн Publish-subscribe. Фронт-энд подписывается на какой-то тип сообщений на каком-то канале (например, new-message, new-friendship-request, new-gift на канале user-ID) и выполняет какие-то действия с данными этих сообщений (обновляет счетчик непрочитанных сообщение, делает новое уведомление через Web Notifications API, что угодно). А сервер, помимо записи данных в базу, отправляет новое сообщение какого-то типа на конкретный канал.

    Т.е. кто-то отправил новое сообщение. Сервер пишет его в базу и пушит на клиент:

    message = Message.create params[:message]
    Pusher["user-#{message.receiver.id}"].trigger('new-message', message)
    


    Клиент просто слушает и что-то делает с данными:

    var channel = pusher.subscribe('user-500fbf726446c604d2000001');
    channel.bind('new-message', function(data) {
      alert('Received new message from ' + data.sender.name + ': ' + data.text)
    });
    


    Посмотрите в сторону Web Sockets — socket.io/faye (если хочется у себя держать) или pusher (если хочется все это просто делать через сервис).
    Ответ написан
    4 комментария