Гугли по фразе push technology
В вк это делается на основе long polling запросов, то есть отправляется запрос с клиента и сервер не закрывает соедеинение. Он ждет пока не появятся какие-то изменения на сервере, как только, что-то меняется(приходит новое сообщение), сервер тут же отправляет по данному соединение ответ. Клиент отправляет новый запрос и все по новой.
Другой вариант, отправлять по сокету. В этом случае сервер сам может инициировать запрос, создать соединение и отправить по нему данные клиенту.
//пример псевдокод
//sendMessage ф-ия на сервере
function sendMessage() {
//do any logic, save to database...
socket.emit(userId, data);
}