Скорее паттерн
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 (если хочется все это просто делать через сервис).