Refreshing the page parameter would be the most common way. If however you're looking for websocket-like realtime events, have a look at the Pusher module.
I found a way to do this using a microflow timer. I just refresh the entity using a dummy commit and the chat works.
You can try with nanoflows. Nanoflows are updating UI from the nanoflow when it's running. I'm using this approach in current project. Microflows updates UI after it's finished. You can do microflows calls from nanoflow action but updating UI should be done in Nanoflow. Still some refreshed timer may be needed, but with nanoflows you can avoid full page refresh...