top | item 1066132

How would you serve 100,000 simultaneous comet requests with Node.js?

40 points| danw | 16 years ago |groups.google.com | reply

15 comments

order
[+] jrockway|16 years ago|reply
I've never been able to get Linux to give me this many file descriptors. If you can convince your OS to give you enough fds, handling 100,000 idle connections is no more difficult than handling one idle connection. The OS feature that polls for activity is O(1) over the number of fds to poll. The memory your app needs to keep each connection alive is minimal, and of course scales linearly.

People like throwing around the number 100,000... but this is really nothing to be excited about. Having 100,000 users is much more exciting than having 100,000 sockets connected from 127.0.0.1...

[+] z8000|16 years ago|reply
"I've never been able to get Linux to give me this many file descriptors."

What do you mean precisely? Do you mean that even with proper ulimit, sysctl, etc setup Linux fails to give you this many descriptors?

[+] notauser|16 years ago|reply
Slightly related...

I have been really enjoying writing code for node.js - I'm using it to render content for non-javascript capable clients and it's handing the load nicely. Being able to maintain one set of tests is a huge win over having a python and a JS implementation.

Has anyone got a good way to redirect non-JS clients to a different set of URLs? At the moment I'm using a combination of user agent sniffing and js+meta page refresh, is there a better way?

[+] cschneid|16 years ago|reply
A <noscript> tag that has a message "You're viewing our javascript-free site. Most features are here, but try upgrading", with a link?
[+] mattiss|16 years ago|reply
Out of curiousity, what client side JS library to people typically use for comet? I've used Orbited and found it pretty good albeit light on documentation.
[+] akirk|16 years ago|reply
I'm also using Orbited on my project Colorillo, but it seems that it will be superseeded by js.io (http://js.io/). I was having a look at it but its documentation is even worse than the one of Orbited :)
[+] xhuang|16 years ago|reply
if you not using comet, strophe.js is very good JS client library for xmpp.
[+] herrherr|16 years ago|reply
A general tip for benchmarking: Never run the benchmark tool on the same machine as the application. Both will compete for CPU and the results will be nearly useless.

Apart from that it might be useful to use several clients (e.g. with autobench) especially if the application is able to handle _many_ requests.