<story><title>Experimenting with Node.js</title><url>http://jeffkreeftmeijer.com/2010/experimenting-with-node-js/</url></story><parent_chain></parent_chain><comment><author>jamwt</author><text>While I think it&apos;s great that more and more developers are being exposed to building network applications using async I/O (which I guess is &quot;evented&quot; now) via Node.js, I think it&apos;s worthwhile to point out that the state of the art has moved well beyond these kind of callback frameworks.  The reason is simple: it sucks programming in callback patterns on serious, large projects.  You end up with lots of routines that are 6 or 7 callback chained together--and don&apos;t forget to attach error callbacks as well at each point.&lt;p&gt;In the Python world, for example, eventlet, gevent, and diesel (disclosure: my project) all use coroutines to achieve very high performance asynchronous I/O that&apos;s still written in a &quot;synchronous&quot; style.  And before that, CCP games has been using stackless python to do coroutine-based networking for the servers behind the very popular MMORPG eve online  (&lt;a href=&quot;http://www.tentonhammer.com/node/10044&quot; rel=&quot;nofollow&quot;&gt;http://www.tentonhammer.com/node/10044&lt;/a&gt;).&lt;p&gt;Even slicker, in languages like Erlang and Haskell (via forkIO + the select/epoll I/O manager), support for asynchronous networking using &quot;blocking-style&quot; code is a fundamental language/compiler/vm feature.  When you write &lt;i&gt;any&lt;/i&gt; code in these languages, you&apos;re transparently taking advantage of the same scaling characteristics node.js and its ilk provide.&lt;p&gt;So, I&apos;d humbly suggest to anyone getting serious about doing this kind of programming that they investigate some of these systems (which are usually built by weary callback-style async I/O veterans) and leapfrog the rest of their peers.  Consider Node.js a gateway drug.&lt;p&gt;Linkage:&lt;p&gt;&lt;a href=&quot;http://eventlet.net/&quot; rel=&quot;nofollow&quot;&gt;http://eventlet.net/&lt;/a&gt;
&lt;a href=&quot;http://github.org/jamwt/diesel&quot; rel=&quot;nofollow&quot;&gt;http://github.org/jamwt/diesel&lt;/a&gt;
&lt;a href=&quot;http://en.wikipedia.org/wiki/Asynchronous_I/O#Light-weight_processes_or_threads&quot; rel=&quot;nofollow&quot;&gt;http://en.wikipedia.org/wiki/Asynchronous_I/O#Light-weight_p...&lt;/a&gt;
&lt;a href=&quot;http://www.galois.com/~dons/slides/a-scalable-io-manager-for-ghc.pdf&quot; rel=&quot;nofollow&quot;&gt;http://www.galois.com/~dons/slides/a-scalable-io-manager-for...&lt;/a&gt;</text></comment>
<story><title>Experimenting with Node.js</title><url>http://jeffkreeftmeijer.com/2010/experimenting-with-node-js/</url></story><parent_chain></parent_chain><comment><author>reeses</author><text>Why is it that within ten seconds, I felt compelled to &quot;hump&quot; other arrows with my own?&lt;p&gt;It was also interested to see if I could get other people to form lines and other constructs, without any communication other than my own cursor.</text></comment>