狠狠撸

狠狠撸Share a Scribd company logo
Node.js で Web アプリ開発

      NSEG #15

     ながぬまたつみ
普通のサーバー
マルチプロセス(スレッド)サーバー
Node.js




          Evented I/O for V8 JavaScript

(V8 JavaScript を用いたイベント駆动滨/翱の実現
                  )
イベント駆动滨/翱とは
? なにか起こったらデータ入出力処理をする
  o なにか → イベント
  o 起こったら → 駆動
  o データ入出力処理をする → I/O
    ? ファイル
    ? ソケット
    ? データーベース
    ? ネットワーク
    ? 標準入出力
    ? etc...
イベント駆动滨/翱とは



        要するに
イベント駆动滨/翱



      ずくなし のこと。
イベント駆动滨/翱
というと人聞きが悪いので... 朝食の準備を考えてみよ
う

 ?   パンをトースターにセット
 ?   牛乳をグラスに入れ、電子レンジであたため
 ?   フライパンに卵を入れてコンロへ
 ?   まいん!を見る
 ?   電子レンジがチーン → 牛乳を取り出す
 ?   0655を見る
 ?   目玉焼き完成 → お皿に盛る
 ?   シャキーン!を見る
 ?   トースト完了
     o いただきます
イベント駆動じゃないと...
(マルチスレッド)
3人で朝食の準備をする!

? Aさん:パンをトースターにセット
  o トースト完了を待つ!
? Bさん:牛乳をマグに入れ、電子レンジでスタート
  o あたため完了を待つ!
? Cさん:フライパンに卵を入れてコンロへ
  o 目玉焼き完了を待つ!
? それぞれできたところで、みなさんご一緒に
  o いただきます
  o キッチンに3人もいたら狭い...
マルチプロセス(スレッド)サーバー
イベント駆动サーバー
イベント駆動は何がいいのか

 ? イベントが起こるまで何もしない
   o イベントが起こらなければリソースを消
     費しない

 ? 処理が終わったらすぐリソースを開放
   o イベントを大量にさばける

 ? 必要なイベントの処理のみ書けば良い
   o 処理が独立して見通しが良くなる
   o 自動テストしやすい
Node.js




          Evented I/O for V8 JavaScript

(V8 JavaScript を用いたイベント駆动滨/翱の実現
                  )
なぜ JavaScript なのか

 ? JavaScript は イベント駆動

  element.onclick = function() {
    alert("Hello, world!");
  }

 ? JavaScript はシングルスレッド
    o イベント駆動は基本的にシングルスレッド
    o ライブラリもシングルスレッド
つまり Node.js とは
  ? JavaScriptで書ける!
     o クライアントもサーバーも同じ言語
     o Webアプリ開発者なら使えるはず

  ? ハイパフォーマンスなアプリが書ける
    !
    o 同期不要

  ? HTML5 & NoSQLと相性がいい!
    o Web Socket
利用例
? リアルタイム チャット
? リアルタイムお絵かき
? Kinnectとつなげてゲーム
? 音声通話
  o HTML Audio API + Web Socket
? プレゼンツール
? WebOS
  o Developing JavaScript
    Services https://developer.palm.com/content/api/
    dev-guide/js-services/overview.html
いいことばかりでもないけど...

? イベント駆動はちょっと面倒
  o 無名関数のネスト...読みづらい
  o エラー処理が書きづらい

? マルチコア対応
  o シングルプロセス&シングルスレッドで性能が
    出る?
  o 対応中...

? まだまだ発展途上!
  o 2009/2 → 2011/4 v0.4.7
Node.js 開発環境

          ?もちろん

             vi
            node
         Webブラウザ

        でもいいのですが...
奥别产ブラウザですべて开発!




           http://cloud9ide.com/
    https://github.com/ajaxorg/cloud9
Cloud9 IDE

? ブラウザ上でコーディング
? ブラウザ上で実行&確認
? ブラウザ上でデバッグ
Cloud9 IDE

             デモ
Node.js を拡張する
? モジュール
  o JavaScriptで書く
  o require('module');

? C(C++)モジュール
  oC
  o wscript
  o node-waf configure build
Node.js 関連プロダクト
? npm ... Node Package Manager
   o http://npmjs.org/
   o npm install <package>
   o package.json

? CoffeeScript ... better JavaScript
  o http://jashkenas.github.com/coffee-script/
  o コンパイルするとJavaScriptのコードが得られ
    る
  o Rails 3.1でもサポートされるらしい

? Jison ... JavaScript parser generator
   o http://zaach.github.com/jison/
今後の Node.js
? マルチプロセス対応
  o node自体が対応 ... node 起動オプションで
    指定
  o マルチプロセス対応モジュール
  o アプリケーションレベル(Web Workers)
おしまい




   ありがとうございました。

More Related Content

Node.js で Web アプリ開発