C++ Chat system (with Blueprint widgets)

Hi.
I’m trying to create a chat system and I have several questions.

As far as I can see it, there are three possible options for me:

  1. When the user enters a message, the submit event calls a remote function with the text of the message, then I send everybody the message using the built in multicast replication system.
  2. Whenever input comes along, I do a remote function call, but then iterate over all the connected clients, determine each client’s distance from the speaker, and if within range, I manually push the message to the player
  3. I keep hearing that people actually implemented a chat server to do that.

So, my question is: what’s the standard way of doing things? Which option should I generally prefer and why?
If I go with the first two options, which class should handle the message dispatching? The game state/Game mode/each player’s player controller? What would be ideal?
And also, why would people go with the third option? Why would you need a standalone, separate chat server anyway? Why won’t the Unreal networking suffice?

A very general question.

Thanks in advance!