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
You should check out XMPP PubSub, which defines a generic publish/subscribe protocol over XMPP. There’s also an XMPP extension called BOSH (lower-level protocol details are documented separately in XEP-0124) that defines a mechanism that allows HTTP clients to bind to XMPP servers using long-polling (i.e., comet). Combining these two specifications gives you a robust event subscription model for web-apps using comet. Even if you don’t end up using XMPP/BOSH, the specs contain some valuable insight into how this sort of system can be built.
If you do end up using XMPP and BOSH here are some tools you may find useful:
Admittedly this is a very heavy-weight solution, and it may not be appropriate for your particular application, but a lot of thought was put into these standards so they may be helpful.