Hello,
I'm whiling to add a support of Server Side events to CppCMS. I understand the technical part of what to do on the level of communication: Client sends long polling XmlHTTPRequest, and waits for respond, server accepts the connection and does not respond until server side event occurs and sends the response to the client. The client repeats the procedure.
However, this is too "low" level for most of web developers. There are many questions: how do I manage events, how do I manage connections and so on.
I thought about two possible models:
There are some named events defined and the server side, for example "New Message in Chat Room no 134"; when the request accepted the server side application checks the messages in the room (for example in DB) and if there is no new messages for the client it subscribes to event and waits on it.
When some other client posts data to the server, it notifies all applications on the "New Message in Chat Room no 134" event and they wake up and send these messages to clients, and so on.
This model is still looks like quite "low level" model, but it hides all notification methods.
Another option is to define some named queues, so each client creates such queue upon connection to server and waits for new messages. When some client posts a new message to "Chat Room no 134", on the server side it is broadcasted to all queues connected to this "Chat Room no 134", and the message is delivered to client.
However there are many questions that are risen:
- How do I manage queues and the session level, at the level of single page?
- How do I delete queues and create timeouts on them?
- What happens if more then one "window" subscribes to same queue?
Create a persistent object on server side that glues between server side events and user side events. It may communicate over distinct XHR requests that are redirected to it.
So client (JavaScript) registers events and waits for them with XHR and server side dispatched event notifications, until the page is rebuild.
So, I would like to know, what are most popular and recommended API models behind server side push technologies?
Thanks
Edit: Added third option