Browse Source

Merge branch 'ujh/master'

Conflicts:

	website/index.html
v0.7.4-release
Ryan 16 years ago
parent
commit
1614f51047
  1. 926
      website/api.html
  2. 213
      website/index.html

926
website/api.html

File diff suppressed because it is too large

213
website/index.html

@ -1,5 +1,7 @@
<html> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<style> <html xmlns="http://www.w3.org/1999/xhtml">
<head>
<style type="text/css">
ul { ul {
padding: 0; padding: 0;
margin: 0; margin: 0;
@ -7,10 +9,11 @@
</style> </style>
<script type="text/javascript" src="sh_main.js"></script> <script type="text/javascript" src="sh_main.js"></script>
<script type="text/javascript" src="sh_javascript.min.js"></script> <script type="text/javascript" src="sh_javascript.min.js"></script>
<link type="text/css" rel="stylesheet" href="style.css"> <link type="text/css" rel="stylesheet" href="style.css" />
<link type="text/css" rel="stylesheet" href="sh_vim-dark.css"> <link type="text/css" rel="stylesheet" href="sh_vim-dark.css" />
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>node.js</title> <title>node.js</title>
</head>
<body onload="sh_highlightDocument();"> <body onload="sh_highlightDocument();">
<div id="toc"> <div id="toc">
<ol> <ol>
@ -26,11 +29,15 @@
<h1><a href="http://tinyclouds.org/node">Node</a></h1> <h1><a href="http://tinyclouds.org/node">Node</a></h1>
<p id="introduction">Purely event-based I/O for <a <p id="introduction">
href="http://code.google.com/p/v8/">V8 javascript</a>. Purely event-based I/O for
<a href="http://code.google.com/p/v8/">V8 javascript</a>.
</p>
<p>An example of a web server written with Node which responds with <p>
An example of a web server written with Node which responds with
"Hello World" after waiting two seconds: "Hello World" after waiting two seconds:
</p>
<pre> <pre>
new node.http.Server(function (req, res) { new node.http.Server(function (req, res) {
@ -40,130 +47,150 @@ new node.http.Server(function (req, res) {
res.finish(); res.finish();
}, 2000); }, 2000);
}).listen(8000); }).listen(8000);
puts("Server running at http://127.0.0.1:8000/"); puts("Server running at http://127.0.0.1:8000/");</pre>
</pre>
<p> To run the server, put the code into a file <code>example.js</code> <p>
and execute it with the <code>node</code> program To run the server, put the code into a file
<pre class="sh_none">% /usr/local/bin/node example.js <code>example.js</code> and execute it with the <code>node</code>
Server running at http://127.0.0.1:8000/ program
</pre> </p>
<pre class="sh_none">
% /usr/local/bin/node example.js
Server running at http://127.0.0.1:8000/</pre>
<p> See the <a href="api.html">API documentation</a> for more examples. <p>
See the <a href="api.html">API documentation</a> for more
examples.
</p>
<h2 id="audience">Audience</h2> <h2 id="audience">Audience</h2>
<p>This project is for those interested in <p>This project is for those interested in</p>
<ul> <ul>
<li>server-side javascript <li>server-side javascript</li>
<li>developing evented servers <li>developing evented servers</li>
<li>developing new web frameworks <li>developing new web frameworks</li>
</ul> </ul>
<h2 id="about">About</h2> <h2 id="about">About</h2>
<p> Node's goal is to provide an easy way to build scalable network <p>
programs. Node's goal is to provide an easy way to build scalable network
In the above example, the 2 second delay does not prevent the server from programs. In the above example, the 2 second delay does not
handling new requests. prevent the server from handling new requests. Node tells the
Node tells the operating system (through operating system (through <code>epoll</code>, <code>kqueue</code>,
<code>epoll</code>, <code class="sh_none">/dev/poll</code>, or <code>select</code>)
<code>kqueue</code>, that it should be notified when the 2 seconds are up or if a new
<code class="sh_none">/dev/poll</code>, connection is made&mdash;then it goes to sleep. If someone new
or <code>select</code>) connects, then it executes the callback, if the timeout expires,
that it should be notified when the 2 seconds are up or if a new connection it executes the inner callback. Each connection is only a small
is made&mdash;then it goes to sleep. If someone new connects, then it heap allocation.
executes the callback, if the timeout expires, it executes the inner </p>
callback. Each connection is only a small heap allocation.
<p>
<p>This is in contrast to today's more common model This is in contrast to today's more common model where OS threads
where OS threads are employed for concurrency. Thread-based networking are employed for concurrency. Thread-based networking
<a href="http://www.sics.se/~joe/apachevsyaws.html">is</a> <a href="http://www.sics.se/~joe/apachevsyaws.html">is</a>
<a href="http://www.kegel.com/c10k.html">relatively</a> <a href="http://www.kegel.com/c10k.html">relatively</a>
<a href="http://bulk.fefe.de/scalable-networking.pdf">inefficient</a> <a href="http://bulk.fefe.de/scalable-networking.pdf">inefficient</a>
<!-- TODO needs links --> <!-- TODO needs links -->
and and very difficult to use.
very
difficult
to
use.
Node will show much better memory efficiency under high-loads Node will show much better memory efficiency under high-loads
<!-- TODO benchmark --> <!-- TODO benchmark -->
than systems which allocate 2mb thread stacks for each connection. than systems which allocate 2mb thread stacks for each connection.
Furthermore, users of Node are free from worries of dead-locking the Furthermore, users of Node are free from worries of dead-locking
process&mdash;there are no locks. No function in Node directly performs the process&mdash;there are no locks. No function in Node
I/O, so the process never blocks. Because nothing blocks, less-than-expert directly performs I/O, so the process never blocks. Because
programmers are able to develop fast systems. nothing blocks, less-than-expert programmers are able to develop
fast systems.
<p>Node is similar in design to systems like </p>
Ruby's <a href="http://rubyeventmachine.com/">Event Machine</a>
or <p>
Python's <a href="http://twistedmatrix.com/">Twisted</a>. Node is similar in design to systems like Ruby's
Node takes the event model a bit further. For example, in other systems <a href="http://rubyeventmachine.com/">Event Machine</a>
there is always a blocking call to start the event-loop. Typically one or Python's <a href="http://twistedmatrix.com/">Twisted</a>.
defines behavior through callbacks at the beginning of a script and at the Node takes the event model a bit further. For example, in other
end starts a server through a call like <code>EventMachine::run()</code>. systems there is always a blocking call to start the event-loop.
In Node it works differently. By default Node enters the event loop after Typically one defines behavior through callbacks at the beginning
executing the input script. Node exits the event loop when there are no more of a script and at the end starts a server through a call like
callbacks to perform. Like in traditional browser javascript, the event loop <code>EventMachine::run()</code>. In Node it works differently.
By default Node enters the event loop after executing the input
script. Node exits the event loop when there are no more callbacks
to perform. Like in traditional browser javascript, the event loop
is hidden from the user. is hidden from the user.
</p>
<p>Node's HTTP API has grown out of my difficulties developing and working <p>
with web servers. For example, streaming data through most web frameworks is Node's HTTP API has grown out of my difficulties developing and
impossible. Or the oft-made false assumption that all message headers have working with web servers. For example, streaming data through
unique fields. Node attempts to correct these and other problems in its most web frameworks is impossible. Or the oft-made false
API. Coupled with Node's purely evented infrastructure, it will make a assumption that all message headers have unique fields. Node
more comprehensive foundation for future web libraries/frameworks. attempts to correct these and other problems in its API. Coupled
with Node's purely evented infrastructure, it will make a more
<p> <i>But what about multiple-processor concurrency? Threads are necessary comprehensive foundation for future web libraries/frameworks.
to scale programs to multi-core computers.</i> The name <i>Node</i> should </p>
give some hint at how it is envisioned being used. Processes are necessary
to scale to multi-core computers, not memory-sharing threads. The
fundamentals of scalable systems are fast networking and non-blocking
design&mdash;the rest is message passing. In the future, I'd like Node to
to be able to spawn new processes (probably using the <a
href="http://www.whatwg.org/specs/web-workers/current-work/">Web Workers
API</a>), but this is something that fits well into the current design.
<h2 id="download">Download</h2> <p>
<i>
But what about multiple-processor concurrency? Threads are
necessary to scale programs to multi-core computers.
</i>
The name <i>Node</i> should give some hint at how it is envisioned
being used. Processes are necessary to scale to multi-core
computers, not memory-sharing threads. The fundamentals of scalable
systems are fast networking and non-blocking design&mdash;the rest
is message passing. In the future, I'd like Node to to be able to
spawn new processes (probably using the
<a href="http://www.whatwg.org/specs/web-workers/current-work/">
Web Workers API
</a>), but this is something that fits well into the current design.
</p>
<p><a href="http://github.com/ry/node/tree/master">The git repo</a> <h2 id="download">Download</h2>
<p>
<a href="http://github.com/ry/node/tree/master">The git repo</a>
</p>
<ul> <ul>
<li> 2009.05.31 <a href="http://s3.amazonaws.com/four.livejournal/20090531/node-0.0.2.tar.gz">node-0.0.2.tar.gz</a> <li>
<li> 2009.05.27 <a href="http://s3.amazonaws.com/four.livejournal/20090527/node-0.0.1.tar.gz">node-0.0.1.tar.gz</a> 2009.05.31
<a href="http://s3.amazonaws.com/four.livejournal/20090531/node-0.0.2.tar.gz">node-0.0.2.tar.gz</a>
</li>
<li>
2009.05.27
<a href="http://s3.amazonaws.com/four.livejournal/20090527/node-0.0.1.tar.gz">node-0.0.1.tar.gz</a>
</li>
</ul> </ul>
<h2 id="build">Build</h2> <h2 id="build">Build</h2>
<p>Node eventually wants to support all POSIX operating systems (including <p>
Windows with MinGW) but at the moment it is only being tested on Node eventually wants to support all POSIX operating systems
<b>Linux</b>, (including Windows with MinGW) but at the moment it is only being
<b>Macintosh</b>, and tested on <b>Linux</b>, <b>Macintosh</b>, and <b>FreeBSD</b>. The
<b>FreeBSD</b>. The build system requires Python. V8, on which build system requires Python. V8, on which Node is built,
Node is built, supports only IA-32 and ARM processors. V8 is included in the supports only IA-32 and ARM processors. V8 is included in the Node
Node distribution. There are no dependencies. distribution. There are no dependencies.
</p>
<pre class="sh_none"> <pre class="sh_none">
./configure ./configure
make make
make install make install</pre>
</pre>
<p> Then have a look at the <a href="api.html">API documentation</a>. <p>
Then have a look at the <a href="api.html">API documentation</a>.
</p>
<p>To run the tests <p>To run the tests</p>
<pre class="sh_none"> <pre class="sh_none">
./configure --debug ./configure --debug
make test make test</pre>
</pre>
<h2 id="community">Community</h2> <h2 id="community">Community</h2>
<p> <p>
For help and discussion subscribe to the mailing list at For help and discussion subscribe to the mailing list at
<a href="http://groups.google.com/group/nodejs">http://groups.google.com/group/nodejs</a> <a href="http://groups.google.com/group/nodejs">http://groups.google.com/group/nodejs</a>
@ -175,6 +202,6 @@ make test
code for the chat room is at <a href="http://github.com/ry/node_chat/tree/master">http://github.com/ry/node_chat</a>. code for the chat room is at <a href="http://github.com/ry/node_chat/tree/master">http://github.com/ry/node_chat</a>.
The chat room is not stable and may be occasionally go down. The chat room is not stable and may be occasionally go down.
</p> </p>
</div>
</body> </body>
</html> </html>

Loading…
Cancel
Save