What is Comet (Programming)?
Comet is a web application design paradigm that describes a continuous, two-way interaction between a server and a web browser using native HTTP methods. It was conceived in order to provide a conceptual model for designing responsive and highly interactive web UIs without having to resort to browser plugins like Java applets.
The Comet approach turns the typical HTTP client-server model upside-down to enable a kind of reverse Ajax functionality, wherein the web server initiates a persistent HTTP connection with a client browser and actively pushes out data instead of waiting to serve responses. In other words, Comet represents a "Push-Style" or "Server-Push" mechanism in contrast with HTTP's "Request/Response" or "Get/Pull" mechanism.
A more modern example is WebSocket, a sophisticated transport protocol that borrows from the principles of Comet yet which offers a cleaner and more standardized realization of the idea. However, WebSocket stands on its own as a distinct protocol and is not generally considered to be a form of Comet.
The Comet model is often used for web apps that involve multi-user collaboration where latency must be kept as low as possible for a shared realtime experience. Traditionally, it has been used to provide support for collaborative document editing and multi-protocol chat.
To apply Comet in a web application, two broad methods are available:
- Streaming: Events are pushed from server to client over a single persistent connection, and are usually processed inside a hidden iframe on the page or via XMLHttpRequest.
- Long Polling: The browser polls the server for new events with a persistent request that is held open until it gets a response. When new data is available, the server sends the response and a new long polling request is made by the browser for further events. Rinse and repeat for sustained interaction.