I'm evaluating Pusher and PubNub at the moment to enable bi-directional realtime communications between my primarily web clients and my servers. Both look impressive, with Pusher's docs seeming to be better, and PubNub's scalability and reliability clearly a strong point for them.
However, as I am managing a budget, I am concerned that Pusher & PubNub costs may become an issue for us, and am therefore considering using one of the open source alternatives out there - I've looked primarily at Socket.io, Faye and jWebSocket.
I have my concerns though running the service myself though:
Thanks for the advice.
Faye using Node.js was very easy to set up for me and initially performed very well in testing. However even though the load on my App is only about 10 requests per second with around 3000 open connections - when I switched it to live node.js cpu usage was pinned at 100% (1 core out of 8 available on my box). I was a little disappointed by this and was expecting more.
I considered using redis or running more than one instance of node on different ports and then splitting the load at my application end but looking at PubNub's prices it seemed much easier to just offload all this to them.
After trying both Pusher and PubNub I found PubNub to be both cheaper and much lower latency for me too (I am hosted in Singapore and while Pusher was ~500ms for me PubNub was ~250ms roundtrip for me from my application). If you are hosted in the US however the difference would probably be much less.
I also looked at Ape-Server but didn't find any good tutorials/documentation for setting up a Publish/subscribe model so skipped it - but maybe you are smarter than me and will have better experience :)