Comet Gazing is a semi-monthly feature on Comet Daily. We pose a question to our Contributors and post the answers.
This time, we’ve asked our contributors to outline the maturity of their preferred Comet server implementation. We asked 8 primary questions, which we have also put into a handy Comet Maturity comparison grid view.
The criteria are as follows:
- Portability (cross-platform and cross-language)
- Vertical Scalability (# of clients or messages/sec for a single server node)
- Horizontal Scalability (strategies for deploying multiple nodes)
- Bayeux support or support for something similar
- Delivery Guarantees
- Transports (polling, long polling, callback polling, iframe streaming, htmlfile streaming, xhr streaming, multipart streaming, SSE)
- Status (alpha, beta, production)
- License and Pricing
- Server daemon will run on any platform for which Perl is available.
- In live use typically 1,000 clients per node receiving 2 msgs (~400 bytes) per sec each. Tested up to 5,000 clients per node receiving 1 msg/sec each.
- Nodes exist independently, supports broadcasting for message distribution. Cluster of three Meteor nodes runs FT Alphaville.
- Transports are completely configurable within simple constraints.
- Server supports client ‘catch-up’, allowing clients to regulate quality of service themselves.
- Polling (Yes), Long polling (Yes), callback polling (Yes), iframe streaming (Yes), htmlfile streaming (Yes), xhr streaming (Yes), multipart streaming (Yes, but no client support), SSE (Yes, but no client support). Meteor also distinguishes between smart polling (in which the poll frequency changes in proportion to message frequency) and simple polling (in which it does not). Both are supported.
- Stable, in production use.
- GPL v2. Free.
- Additional Notes: Meteor is all about simplicity, ease of use and getting on with solving a single problem effectively. It is a standalone tool to complement your existing web applications, doesn’t show any bias or favour toward any framework or technology, and can be set up and run by anyone. It is very thoroughly documented, with a commitment to keeping documentation exactly in sync with releases, and the website provides a number of imaginative live examples as well as comprehensive step-by-step tutorials. It’s reliable, it scales, and with a low barrier to entry, it’s worth checking out.
- Lightstreamer Server is deployable on any platform with Java. Lightstreamer Adapters and Clients are based on several languages. Server APIs: Java, .NET, and TCP sockets. Client APIs: Flash, Flex, Java SE, Java ME, and .NET
- Scalability depends only on the message throughputs, not on the number of clients (e.g. on a single CPU, 100,000+ sockets opened with zero throughput; 20,000 sockets opened with 1 msg/sec).
- Full support of load balancing appliances.
- Lightstreamer network protocol
- Yes (see the Lightstreamer website for details)
- Polling, Long Polling, iframe streaming.
- Free licensing for Moderato edition. Commercial licensing for Allegro, Presto, Vivace editions (site license or per-server license).
- Additional Notes: Lightstreamer was created in 2000. In these eight years, it has been adopted and used in many production systems, especially by the largest banks. Lightstreamer has been chosen by TIBCO Software as the core of their Ajax Message Service product (AMS), with an OEM license agreement. The most long-lasting production case for Lightstreamer has been IntesaTrade (a bank part of Intesa Sanpaolo Group), where Lightstreamer Server has been running for 5+ years. Lightstreamer provides many advanced features beyond the Comet engine, such as: bandwidth management, frequency management, adaptive throttling, delta delivery, conflation, pre-filtering, meta-push, and a fine-grained permissioning system.
Cometd + Python
- No load testing done yet.
- Possible, but not implemented yet.
- Supports Bayeux.
- Not yet.
- Long polling, callback polling, iframe Streaming.
- Open source license (BSD), free
Cometd + Jetty
- Jetty is available on Java 1.4 and above, which makes it available on a large range of devices, from Android telephones to large multicore servers. For Comet applications, Jetty has optimized support for Bayeux/Cometd, DWR reverse Ajax and ActiveMQ Ajax message delivery. The client side support for Bayeux is available in Java, the Dojo Toolkit, and jQuery, and efforts are underway to support it in Ext JS as well as others.
- Jetty/Bayeux can support 20,000 simultaneous clients per node with several thousands of messages per second. Jetty/ActiveMQ has been able to deliver 7,000 price changes per second to 40,000 users over a 3 node cluster.
- The messaging semantic of Bayeux easily integrates with distributed messaging systems such as JMS to provide cluster support. Jetty has integrations with Terracotta and Wadi for session clustering support.
- Jetty provides the core Cometd Java Bayeux implementation and it is optimized for the Jetty asynchronous features.
- Not supported.
- Polling, long polling, and callback polling. Previous support for iframe streaming has been drop due to lack of demand.
- Apache 2.0 open source. Commercial support and services available via Webtide.
- 30,000 clients max. 1 million total client updates/sec at 10,000 clients. There are lots of variables involved in benchmark figures. These are the headline figures. More details are available.
- Client side load balancing. Client libraries implement various algorithms for choosing a server at connection and reconnection time.
- RTTP (Real Time Text Protocol).
- Reliable messaging. With streaming transports there is a level of guarantee with TCP/IP, however through reconnections this guarantee is not maintained. Where required, guaranteed messaging is layered on top of the core product.
- Polling, iframe streaming, multipart streaming, direct socket.
- Production. Liberator has been used in production environments for 8 years. Liberator is used commercially by a number of large banks globally.
- Liberator is a commercial product sold by Caplin Systems in the finance industry. Recently Caplin released a free version for use in non commercial environments.
- Implementation is 100 % Erlang, Runs on all platform capable of hosting the Erlang VM (Linux, BSD, Windows, Mac)
- No load testing done yet
- Yes (ErlyComet is designed from ground up as distributed system)
- Yes, Bayeux
- Yes (messages get queued until delivered)
- Long polling, callback polling
- Open source license (MIT), free
- GlassFish runs on top of Java, so it can be installed on any OS that supports the Java implementation (Unix/Linux/Window/OSX/etc.).
- Sun achieved 883.66 JOPS@Standard on a single app server instance running on a Sun Fire T2000 server. That translates to over 7,000 simultaneous active users.*
- GlassFish V2 contains many new features, among them enhanced clustering capabilities. The new clustering capabilities enhance high availability and scalability for deployment architectures through in-memory session state replication. With in-memory state replication, clustered server instances replicate session state in a ring topology, storing the replicated information in memory. With GlassFish, you can:
- Create and manage clusters from a single administration console, manage a cluster as a single entity
- Dynamically grow or shrink a cluster by adding or removing application server instances.
- Automatically update the load balancer.
- Automatically monitor cluster health and balance load across available instances.
*SPEC and the benchmark name SPECjAppServer 2004 are registered trademarks of the Standard Performance Evaluation Corporation. Benchmark result stated above reflect results published on www.spec.org as of March 14th 2008. For the latest SPECjAppServer 2004 benchmark results, visit http://www.spec.org/. Referenced score:  One Sun Fire T2000 (1 chip, 8 cores) appserver and one Sun Fire T2000 (1 chip, 6 cores) database; 883.66 JOPS@Standard.
- Runs on Windows, OS X, Linux, and any Unix-compatible system.
- Tested against 10,000 idling clients without issue on Intel Core Duo 1.6 GHZ.
- Orbited acts as a distributed hash table, allowing unlimited horizontal scaling with an O(1) peer-messaging dispatch algorithm. See HaloD for more information.
- Not supported, but Orbited does support Revolved, a publish/subscribe protocol with features similar to Bayeux.
- Polling, long polling, callback polling, iframe streaming, htmlfile streaming, xhr streaming, multipart streaming, sse streaming.
- Late Alpha.
- MIT License (open source).
- Additional Notes: How mature is your Comet server of choice? The answer is not as simple as you might think. Comet is currently a moving target, and the landscape now will change dramatically over the next 12 months. Any project that claims to have a stable and mature architecture probably just has a stalled development effort. For instance, I have yet to see an adequate architecture for horizontally scaling a Comet cluster. Current projects can only mostly only speak to the stability of the server running in a production environment in response to questions on maturity. This isn’t a critique of any individual software project, rather it speaks to the fact that Comet is still a very new and relatively unknown technology.
By this measure, Orbited passes the bar well. It has run without significant problems in multiple production environments for upwards of six months. Keep in mind that Orbited is an experimental project, and I wouldn’t recommend Orbited for the general public immediately. The architecture and best practices are changing significantly as time progresses, and particularly with the upcoming 0.4.0 release next week, so developers are only encouraged to use Orbited if they don’t mind working within an evolving paradigm.