Hello,
If you just need to exchange messages between clients, any of the proposed solutions will work, a publish/subscribe pattern is enough for your needs and any of the solutions can implement this pattern.
1. MQTT is usually used on constrained nets where bandwidth is important, the most common usage is working as a sensor, example: sending temperature every x seconds.
2. You can use any TCP library and implement your own Server and Client, using queues to store the messages exchanged between clients. I recommend Indy which is free, included with any Delphi version, supports all personalities and works very well.
3. WebSocket protocol has the advantage that using the same server implementation, is supported on VCL and WebBrowsers clients. Also has other features like compression, sub-protocols... As an example, I've a presence demo that allows to know who is subscribed to a channel, and exchange messages between peers, this can be useful for applications like chat rooms, collaborators on a document, people viewing the same web page, competitors in a game... find below a link of the compiled sample if you want to test it and get a better idea of how works.
https://www.esegece.com/download/protocols/ProtocolPresence.zip
Kind Regards,
Sergio