Comet (programming)
Comet is a
The use of Comet techniques in web development predates the use of the word Comet as a neologism for the collective techniques. Comet is known by several other names, including
Ajax Push,[4][5]
Reverse Ajax,[6] Two-way-web,[7] HTTP Streaming,[7] and
In recent years, the standardisation and widespread support of WebSocket and Server-sent events has rendered the Comet model obsolete.
History
Early Java applets
The ability to embed Java applets into browsers (starting with Netscape Navigator 2.0 in March 1996[10]) made two-way sustained communications possible, using a raw TCP socket[11] to communicate between the browser and the server. This socket can remain open as long as the browser is at the document hosting the applet. Event notifications can be sent in any format – text or binary – and decoded by the applet.
The first browser-to-browser communication framework
The very first application using browser-to-browser communications was Tango Interactive,[12][failed verification] implemented in 1996–98 at the Northeast Parallel Architectures Center (NPAC) at Syracuse University using DARPA funding. TANGO architecture has been patented by Syracuse University.[13] TANGO framework has been extensively used as a distance education tool.[14] The framework has been commercialized by CollabWorx and used in a dozen or so Command&Control and Training applications in the United States Department of Defense[citation needed].
First Comet applications
The first set of Comet implementations dates back to 2000,
In April 2001, Chip Morningstar began developing a Java-based (J2SE) web server which used two HTTP sockets to keep open two communications channels between the custom HTTP server he designed and a client designed by Douglas Crockford; a functioning demo system existed as of June 2001.[citation needed] The server and client used a messaging format that the founders of State Software, Inc. assented to coin as JSON following Crockford's suggestion. The entire system, the client libraries, the messaging format known as JSON and the server, became the State Application Framework, parts of which were sold and used by Sun Microsystems, Amazon.com, EDS and Volkswagen.[citation needed]
In March 2006,
In 2006, some applications exposed those techniques to a wider audience:
Implementations
Comet applications attempt to eliminate the limitations of the
Specific methods of implementing Comet fall into two major categories: streaming and
Streaming
An application using streaming Comet opens a single
Specific techniques for accomplishing streaming Comet include the following:
Hidden iframe
A basic technique for dynamic web application is to use a hidden iframe HTML element (an inline frame, which allows a website to embed one HTML document inside another). This invisible iframe is sent as a chunked block, which implicitly declares it as infinitely long (sometimes called "forever frame"). As events occur, the iframe is gradually filled with script
tags, containing JavaScript to be executed in the browser. Because browsers render HTML pages incrementally, each script
tag is executed as it is received. Some browsers require a specific minimum document size before parsing and execution is started, which can be obtained by initially sending 1–2 kB of padding spaces.[25]
One benefit of the iframes method is that it works in every common browser. Two downsides of this technique are the lack of a reliable error handling method, and the impossibility of tracking the state of the request calling process.[25]
XMLHttpRequest
The XMLHttpRequest (XHR) object, a tool used by Ajax applications for browser–server communication, can also be pressed into service for server–browser Comet messaging by generating a custom data format for an XHR response, and parsing out each event using browser-side JavaScript; relying only on the browser firing the onreadystatechange
callback each time it receives new data.
Ajax with long polling
This article possibly contains original research. (December 2017) |
None of the above streaming transports work across all modern browsers without negative side-effects. This forces Comet developers to implement several complex streaming transports, switching between them depending on the browser. Consequently, many Comet applications use long polling, which is easier to implement on the browser side, and works, at minimum, in every browser that supports XHR. As the name suggests, long polling requires the client to poll the server for an event (or set of events). The browser makes an Ajax-style request to the server, which is kept open until the server has new data to send to the browser, which is sent to the browser in a complete response. The browser initiates a new long polling request in order to obtain subsequent events. IETF RFC 6202 "Known Issues and Best Practices for the Use of Long Polling and Streaming in Bidirectional HTTP" compares long polling and HTTP streaming. Specific technologies for accomplishing long-polling include the following:
XMLHttpRequest long polling
For the most part, XMLHttpRequest long polling works like any standard use of XHR. The browser makes an asynchronous request of the server, which may wait for data to be available before responding. The response can contain encoded data (typically XML or JSON) or Javascript to be executed by the client. At the end of the processing of the response, the browser creates and sends another XHR, to await the next event. Thus the browser always keeps a request outstanding with the server, to be answered as each event occurs.
Script tag long polling
While any Comet transport can be made to work across
Unlike iframes or XMLHttpRequest objects, script
tags can be pointed at any URI, and JavaScript code in the response will be executed in the current HTML document. This creates a potential security risk for both servers involved, though the risk to the data provider (in our case, the Comet server) can be avoided using JSONP.
A long-polling Comet transport can be created by dynamically creating script
elements, and setting their source to the location of the Comet server, which then sends back JavaScript (or JSONP) with some event as its payload. Each time the script request is completed, the browser opens a new one, just as in the XHR long polling case. This method has the advantage of being cross-browser while still allowing cross-domain implementations.[26]
Alternatives
Browser-native technologies are inherent in the term Comet. Attempts to improve non-polling HTTP communication have come from multiple sides:
- The Web Hypertext Application Technology Working Group (WHATWG) specifies so called server-sent events,[27] which defines a new JavaScript interfaceinclude this technology.
EventSource
and a new MIME typetext/event-stream
. All major browsers except Microsoft Internet Explorer - The
- The Bayeux protocol by the client-side JavaScript code with multiple Comet servers, and allowing the same Comet server to communicate with multiple client-side JavaScript implementations. Bayeux is based on a publish/subscribe model, so servers supporting Bayeux have publish/subscribe built-in.[29]
- The BOSH protocol by the XMPP standards foundation. It emulates a bidirectional stream between the browser and server by using two synchronous HTTP connections.
- The JSONRequest object, proposed by Douglas Crockford, would be an alternative to the XHR object.[30]
- Use of plugins, such as Java applets or the proprietary Adobe Flash (using RTMP protocol for data streaming to Flash applications). These have the advantage of working identically across all browsers with the appropriate plugin installed and need not rely on HTTP connections, but the disadvantage of requiring the plugin to be installed
- Google announced[31] a new Channel API for Google App Engine,[32] implementing a Comet-like API with the help of a client JavaScript library on the browser. This API has been deprecated. [33]
See also
Notes
- ^ Russell, Alex (2006-03-04). "Comet: Low Latency Data for the Browser". Retrieved 2014-11-02.
References
- ^ Krill, Paul (September 24, 2007). "AJAX alliance recognizes mashups". InfoWorld. Retrieved 2010-10-20.
- ISBN 978-1-59059-998-3.
- ^ a b Gravelle, Rob. "Comet Programming: Using Ajax to Simulate Server Push". Webreference.com. Archived from the original on 2010-10-18. Retrieved 2010-10-20.
- San Francisco, California: Sun Microsystems, Inc. Retrieved 2008-06-10.)
{{cite speech}}
: CS1 maint: location (link - ^ a b "Ajax Push". ICEfaces.org. Retrieved 2014-10-23.
- ISBN 1-59059-998-5.
- ^ ISBN 0-596-10180-5.
- ^ Double, Chris (2005-11-05). "More on Ajax and server push". Different ways of doing server push. Retrieved 2008-05-05.
- ^ Nesbitt, Bryce (2005-11-01). "The Slow Load Technique/Reverse AJAX". Simulating Server Push in a Standard Web Browser. Archived from the original on 2006-02-08. Retrieved 2008-05-06.
- ^ "Netscape.com". Archived from the original on November 15, 1996. Retrieved 2017-08-16.
{{cite web}}
: CS1 maint: bot: original URL status unknown (link) - ^ "java.net.Socket (Java 2 Platform SE v1.4.2)" Archived May 19, 2009, at the Wayback Machine
- ^ Beca, Lukasz (1997). "TANGO - a Collaborative Environment for the World-Wide Web". Syracuse University SURFACE. Northeast Parallel Architecture Center, College of Engineering and Computer Science. Retrieved 27 February 2016.
- ^ Podgorny, Marek; Beca, Lukasz; Cheng, Gang; Fox, Geoffrey C.; Jurga, Tomasz; Olszewski, Konrad; Sokolowski, Piotr; Walczak, Krzysztof; PL (June 20, 2000), United States Patent: 6078948 - Platform-independent collaboration backbone and framework for forming virtual communities having virtual rooms with collaborative sessions, archived from the original on 2017-05-09, retrieved 2016-02-27
- ^ Baer, Troy (1999). "Experiences with Using TANGO Interactive in a Distributed Workshop" (PDF). CEWES Major Shared Resource Center. CEWES MSRC/PET TR/99-21. Archived from the original (PDF) on 8 March 2021. Retrieved 27 February 2016.
- ^ "CometDaily: Comet and Push Technology". Archived from the original on 2007-11-13. Retrieved 2007-12-15.
- ^ Just van den Broecke (1 March 2000). “Pushlets: Send events from servlets to DHTML client browsers Archived 2014-08-04 at the Wayback Machine”. JavaWorld. Retrieved 1 August 2014.
- CNET Networks. Retrieved 2008-07-22.
- ^ Alex Russell (3 March 2006). “Comet: Low Latency Data for the Browser Archived 2008-08-12 at the Wayback Machine”. Alex Russell’s blog. Retrieved 29 November 2007.
- ^ K. Taft, Darryl (2006-05-12). "Microsoft Scrubs Comet from AJAX Tool Set". eWEEK.com. Retrieved 2008-07-21.
- ^ Orbited: Enabling Comet for the Masses: OSCON 2008 - O'Reilly Conferences, July 21 - 25, 2008, Portland, Oregon
- ^ Enterprise Comet & Web 2.0 Live Presentation Archived 2008-05-20 at the Wayback Machine
- ^ Dion Almaer (29 September 2005). “Jotspot Live: Live, group note-taking” (interview with Abe Fettig). Ajaxian. Retrieved 15 December 2007.
Matt Marshall (15 December 2006). “Renkoo launches event service — in time to schedule holiday cocktails”. Venture Beat. Retrieved 15 December 2007. - ^ Clint Boulton (27 December 2005). “Startups Board the AJAX Bandwagon”. DevX News. Retrieved 18 February 2008.
- ^ Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing, section 6.4. IETF. Retrieved 2014-07-29
- ^ ISBN 0-596-52838-8.
- ^ ISBN 0-596-10199-6.
- ^ Ian Hickson, ed. (2007-10-27). "6.2 Server-sent DOM events". HTML 5 - Call For Comments. WHATWG. Retrieved 2008-10-07.
- ^
Hickson, Ian (2009-04-23). "The WebSocket API". W3C. Retrieved 2009-07-21.
- ^ Alex Russell; et al. (2007). "Bayeux Protocol - Bayeux 1.0draft1". Dojo Foundation. Retrieved 2007-12-14.
- ^ Crockford, Douglas (2006-04-17). "JSONRequest Duplex". An alternative to XMLHttpRequest for long lasting server initiated push of data. Retrieved 2008-05-05.
- ^ App, The. (2010-12-02) Google App Engine Blog: Happy Holidays from the App Engine team - 1.4.0 SDK released. Googleappengine.blogspot.com. Retrieved on 2014-04-12.
- ^ Paul, Ryan. (2010-12-06) App Engine gets Streaming API and longer background tasks. Ars Technica. Retrieved on 2014-04-12.
- ^ "Package com.google.appengine.api.channel". Google. 2019-11-16. Retrieved 2020-04-30.
This API has been deprecated.
External links
- "Comet Daily". Archived from the original on 2008-01-04. Retrieved 2007-11-29.
Comet Daily provides information about Comet techniques.
*