Developer Day Notes 2: Give Your Sites a Push with Comet

by Dan Drinkard

Goals: What is it, how does it, how do I, the future?

In short, a method to push to browser instead of client pull (eg. polling).

Polling suffers from latency, event chunking, unnecessary bandwidth use, and connection overhead.

Comet work will touch the entire stack; browser, server, message broker/protocol/models.

Bayeux is sort of synonymous with Comet for many people. It’s a Dojo Foundation project for solving common Comet problems, basically a set of protocols (content encoding, formatting, API, no guarantees, etc.).

ome folks use XMPp, nice and robust and stable.

Stomp, Streaming Text-Oriented Messaging Protocol has some fans. Looks sort of like HTTP.

Message Brokers take info from messaging layer to app, Apache ActiveMQ (v popular), RabbitMQ (Java/.Net/C#), MorbidQ (good for testing).

Transports – last mile to browser:

Long-Polling:
Simplest, just hold open connection and then respond.
Client retries on timeout. Looks like only good for one event. “3x max latency” – worst case if you just miss an event is: Response, Request, Response.
Forever Frame
iframe points to a chunked resource that flushes occasionally. Fast.
XHR Streaming:
Same thing but with XHR, fire OnreadyStateChange but [maybe] only WebKit supports it.
ActiveX htmlfile,
IE-only so… booooo.
Server-Sent Events:
HTML 5 spec so of course Opera only. Maybe cool in future.
Sockets:
Straight TCP via plugin like Flash, Silverlight. Optimal speed but plugins may choke on lots of data.

Problems: 2-connection limit, same-origin policy, still half-duplex because HTTP fundamentally is.

Example: what are Twitter users listening to now? Server: Orbited, built on Py/Twisted with Ruby and PHP APIs. Easy to set up, socket-like interface. Real easy install and short config. [Code looks sort of Rails-like in that it gives you places to drop your poller, display code, etc. and you fill them in. Nice.]

Trouble with eating RAM and connections, and possible you’ll have proxy/firewall troubles.

Real trouble is just that the community is young and fragmented and the whole thing is sort of a hack.

Q&A:

Security is especially young, mostly it’s your app’s problem.

Vendors promise 10k-100k idle connections per server, but big grain of salt.