たのしいNode.js
Upcoming SlideShare
Loading in...5
×
 

たのしいNode.js

on

  • 2,356 views

 

Statistics

Views

Total Views
2,356
Views on SlideShare
2,355
Embed Views
1

Actions

Likes
1
Downloads
8
Comments
0

1 Embed 1

http://s.deeeki.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

たのしいNode.js たのしいNode.js Presentation Transcript

  • たのしいnode.jsイベントドリブンの世界
  • ある日のkanpou_さん
  • 12/04の私• いいネタがない – クラウドとはなんだったのか – 「伽藍とバザール」「UNIXという考え方」 – 投資のやりかた ・・・ピンとこない• じゃあネタを借りよう! ⇒ node.js node.jsという環境特にイベントドリブン・非同期I/Oを知ってもらおう!
  • おもいっきり技術志向です。残念ながら楽しげなスライドになりませんでした。
  • node.jsとは?• サーバーサイドJavaScript環境 – Ruby, Python, perl ⇔ (node.js & JavaScript)• 特長 – 単一プロセス、単一スレッド – イベントドリブン・非同期I/O – C10K問題クリア• 続きはWebで!http://nodejs.org/
  • 何がうれしいのか• みんな大好きJavaScript – Google Chrome V8 JavaScript Engine • C言語より高速なJavaScriptによるバイナリ操作が話題 « A- Listers http://tech.a-listers.jp/2012/10/10/faster-than-c/ – YUIも jQueryも• ネットワークプログラム(含Web)が超ラク – ソケット処理はライブラリ丸投げ – イベントドリブン• (うまく書けば)高パフォーマンス – 非同期I/O前提の環境: CPU Idleを活用
  • Echo Servervar net = require(‘net’);var srv = net.createServer(function (sock) { sock.on(‘data’, function (buf, err) { sock.write(buf); });});srv.listen(4050); //TCP port 4050 イベント コールバック
  • イベントドリブンとは • 並列プログラミングモデル – 内部状態の通知によってプログラムが動く – 同時に動いているプログラムは1つ 手続き型・同期I/O イベントドリブ ン・非同期I/O ファイルを読み込む ファイルを読み込む 裏方が 待ってる 別の作業 仕事 読み込みおわった 読み込みおわった読んだファイル 読んだファイルに対する作業 に対する作業
  • 非同期I/Ovar fs = require(‘fs’);//’/to/a’, ‘/to/b’は同時に読み込まれる//タイマー等他イベントは読み込みが完了してなくても処理されるfs.readFile(‘/to/a’, function (err, data) { //読み込んだ結果を表示 console.log(data);});fs.readFile(‘/to/b’, function (err, data) { //読み込んだ結果を表示 console.log(data);});
  • ライブラリ• Web Framework – Express• Middleware – RDB, NoSQL(CouchDB, MongoDB, Redis), Memcached, AMQP• Template Engine – ejs, Jade• Real-Time Web(Comet, WebSocket) – socket.io
  • 使用例• Web GUIを持つTVサーバ 主な仕事 1. チューナから映像が来たら: • UDPでストリーミング 2. Webサーバにアクセスされた ら: • Webページを返す 3. チャネルを選ばれたら: • 切り替える
  • 使用例• Web GUIを持つTVサーバ 従来型(マルチスレッ イベントドリブン 非同期 ド) I/O 暇 (ストリーミングスレッ 映像がきた 映像がきた 映像待ち ド) ストリーミング ストリーミング 送信中 暇 WebAPIチャネル変更 映像くれ チャネル 映像待ち Webレスポンス 変更同期ロック,スレッドセーフ,ワークメモリ・・・
  • うれしくないこと1. CPUが早くなるわけじゃない – あたりまえ – ほとんどがCPU処理のアプリにはあまり意味無し2. イベントドリブン・非同期I/Oへの慣れ – 人間は仕事を直列な手続きとして考えたがる – どんなスケーラブル・プログラミングモデルに慣れ るか?3. シングルスレッドなのでマルチコアが使えない – ミドルウェアによるクラスタ化 • (memcacheによる共有メモリ,RedisやRabbitMQによるPub/Sub)