Thanks in advance if you can get me pointed in the right direction. I am a (very) novice programmer and Linux user, and I would appreciate some advice regarding a software application that I am imagining.
Background: the basic idea is that the application is "Middleware" that runs as a process on Linux and passes plain-text data between remotely connected "Users" and locally-installed "Apps." The data coming from a User would be in the form of an App-specific command (e.g. "read message 95"), and would usually be relatively short. The data returned by the App to the User, on the other hand, could be anything from a single character to several screens-full of text. The job of the Middleware is to manage multiple, simultaneous User connections; recognize an arbitrary number of Apps that register with the Middleware to be notified of User commands; and, route text-only data between connected Users and registered Apps.
An App could be anything that uses text-only communication: a real-time chat program, an email server, an adventure game, a stock market simulator, a turn-based board game, a bulletin board, etc. Each App would be a running process in its own right, managing its own persistent state. So, for example, the application flow might look like this:
My questions: In this situation, what is the best technology/approach for passing data between the Middleware and the Apps? What is the appropriate way to register an App as an observer with the Middleware so that it gets notified appropriately of User commands?
Thanks again and sorry for the length!
To me its like a Publisher/Subscriber architecture (with an administration app built at top of it if you may). What you call as "CHAT LIST" is like chat rooms and in other words, are channels. These channels can be created by admin and your applications can send (publish) a message to it. Each message will then deliver to every other subscribers of the channel (so your applications can also subscribe to existing channels).
This communication method is used in tones of different kind of applications for different purposes. From simple chat apps to distributed micro-systems.
There are many publisher/subscriber services/applications you can choose. Most of these services provide TEXT and BINARY message delivery. Some of them have features like REQUEST/REPLY (you can reply to the message published into the channel) but you can easily implement it (the reply system) yourself in your own application layer.
Telling which MQ (message queue) or PUB/SUB system to choose is just opinion based and not useful. But to help you get started, check NATS , MQTT , RabbitMQ
I have been using nats in my own application for passing data between micro-systems and anther chat application for our systems.