Prinzipiell wird das meist nicht rein serverseitig via PHP o.ä. gelöst. Der Trick ist, dass der Browser eine zweite Anfrage via JavaScript stellt, die der Server vorerst nicht beantwortet! Sie wird erst beantwortet, wenn ein bestimmtes Event eingetreten ist, z.B. dass neuer Content für den Benutzer vorhanden ist. Der Client kann die Daten dann verarbeiten und ggf. eine weitere dieser Anfragen absenden.
Das Konzept nennt man Long Polling (https://en.wikipedia.org/wiki/Push\_technology#Long\_polling) und es gibt viele ähnliche Strategien. Wie das funktioniert kannst du dir in diesem Video anschauen: https://en.wikiversity.org/wiki/Web\_Science/Part1:_Foundations_of_the_web/Dynamic_Web_Content/Ajax_and_the_XMLHttpRequest_class
Es wird sowohl der Server-Code (Java) als auch der Client-Code (JavaScript) gezeigt.