Я делал так.
Включил веб-сокет сервер на определенный порт, использовал ratchet.
Когда на стороне сервера происходит нужное событие, например создание сущности, сокет сервер уведомляется об этом и рассылает уведомления пользователю/пользователям.
Сами уведомления у меня были 3-х видов, но вам нужно только одно: вида {model: "notify", data: {title: "text", body: "text"}}.
На стороне клиента парсите и делает что-хотели.
На php сокеты работают через попу так как нет доступа одного процесса php к другому, поэтому приходится поднимать один сокет сервер который слушает пользователей, а другой который слушает другие php процессы.