ここからは、Node.jsを使ってTypeScriptでサンプルを作っていきたいと思います。
通常、JavascriptはブラウザにパッケージされたJavascriptエンジンで稼働し、ブラウザ上のオブジェクトを操作します。それに対してサーバー上で稼働するサーバサイドJavascriptは異なる目的を持ちます。
サーバサイドJavascriptという使い方は、たしかNetscape全盛の時代からあったと思いますが、実用レベルに達した成功作はNode.js(2009年)が初めてといわれています。私自身もサーバサイドJavascriptを仕事でシステムに組み込んだ事はまだありません。
サーバサイドJavascriptはなにがメリットなのでしょうか?
クライアントとサーバが同じ言語で書ける、クライアントとサーバで動的に機能を補完し合える、などと説明される事が多いようです。それに対して、私の個人的な動機は少々卑近かもしれませんが、以下です。
私のように、プロジェクトごとにワーカーの確保に苦慮する人は、今後の普及を望むのではないでしょうか。
また、ノンブロッキングI/Oによって、メモリの無駄な消費無しにひとつのCPUコアをより効率よくぶん回せるので安いサーバでのサイジングが楽になります。
とはいえ、当面のプロジェクトは人の確保しやすいJava等で組むでしょうが、なにかしらの機能でTypeScript、Node.jsを取り入れたいともくろんでおります。
さて、Node.jsは、サーバサイドで使用するために、ファイルやネットワークI/Oなど多くの機能を追加したものです。そしてノンブロッキングI/Oとイベントループで複数の処理を並列で実行できます。
Javascriptで疑似スレッドは、昔プロジェクトで取り入れた事がありました。環境はAdobe Airでしたが、UIのバックグラウンドで非同期なイベントを待ち受け、重たいファイルのダウンロードをするようなアプリでした。
Node.jsの開発者、ライアン・ダール氏が日本で公演した際、重要なコンセプトを語っています。
http://www.publickey1.jp/blog/11/nodejs_node.html
(会場)なぜ新しい言語ではなくJavaScriptだったのでしょう?
RubyやPythonなどほかのプログラミング言語はすでに、ファイルシステムへのアクセスやDNSへのアクセスを備えていて、そうするとノンブロッキング用のAPIとそれらを同時に使わなければならなかったからです。
JavaScriptを選んだのは、I/Oをどうするべきという概念が言語になかったから。そしてJavaScriptを選んだおかげで、Nodeがこんなに知られることになったのだと思います。
(会場)どういう考えでNodeを開発したのかは聞けたのですが、ではなぜ「Node」という名前なのかを教えてください。どういう意味が込められているのでしょうか。
Nodeは、「Node in Network」のNode。これは全体の分散システムの中のスモールピースを示していて、まだそれは実現できていないけれど、今後の追加機能では分散したNodeをまとめるようなことができるようにします。
APIドキュメント
http://nodejs.org/api/
モジュール
https://npmjs.org/
以下はAPIドキュメントの最初に出てくるコードです。
var http = require('http'); http.createServer( function (request, response) { response.writeHead(200, {'Content-Type': 'text/plain'}); response.end('Hello World\n'); } ).listen(8124);
console.log('Server running at http://127.0.0.1:8124/');
httpモジュールを読みこんで、httpサーバを生成しますがサーバはスレッド的な振る舞いをします。またhttpインターフェイスにはいくつかのイベントが組み込まれています。
httpインターフェイスの説明はこちら
http://nodejs.org/api/http.html
最近のコメント