SlideShare a Scribd company logo
1 of 45
Download to read offline
yurufuwa introduction
of
2010/11/20@JStudy#2
id: Jxck
2010年11月21日日曜日
Jack
2010年11月21日日曜日
噂の Node.js について
•Node.js ってなんなのか?
•何故ここにきてサーバサイドJSな
のか?
•どんなことが出来るのか?
的な話を、
ゆるくふわっと解説します。
2010年11月21日日曜日
Node.js とは?
Node.js = サーバーサイドJS
2010年11月21日日曜日
それだけ?
2010年11月21日日曜日
なら昔からあるじゃん?
•Rhino
•Jaxer
•Nitro
etc..
なぜ Node.js なの?
2010年11月21日日曜日
なぜ を知る3つのキーワード
• イベントループ
• ブロック
• Google V8
2010年11月21日日曜日
イベントループ
2010年11月21日日曜日
スレッドモデルとイベントループ
•スレッドモデル
沢山スレッドを起動して同時に処理する
(マルチスレッド)
•イベントループ
一つのスレッド(シングルスレッド)の中
でイベントとコールバックを使って処理
する。
2010年11月21日日曜日
マルチスレッド
スレッドが増える程メモリを消費
でも今はメモリも安いしたくさん積んでるし。。
2010年11月21日日曜日
富豪メモリ
「メモリが沢山あれば何とかなる」
と思っていた時期が、
ボクにも有りました(キリ!
2010年11月21日日曜日
C10K問題
 リアルタイムWebとやらの流行もあって、同
時に1万くらい同時にアクセスがきて、しかも接
続しっぱなしとかもあり得る時代になって来た。
 そこまで行くと、メモリとかネットワークを
強化しても、越えられない壁が有るかもしれない
ことが分かった。(実際はもっと深い話)
2010年11月21日日曜日
イベントループ
2010年11月21日日曜日
イベントループ
イベントとコールバックで処理をする。
シングルスレッドなので
メモリが少なくて済む。
2010年11月21日日曜日
イベントループモデル
イベントループを採用した実装は既にいく
つかある。
•Twisted - Python
•EventMachine - Ruby
•AnyEvent - Perl
2010年11月21日日曜日
ブロック
2010年11月21日日曜日
イベントループとブロック
イベントループはシングルスレッドなので、途中でブ
ロックが発生すると全体に影響する。
ブロックとは、何か時間のかかる処理のせいで、次の処
理が待たされる状態。
例えば、
•DB からデータをたんまり読み込む
•ネットワーク越しに応答をじっと待つ
etc
2010年11月21日日曜日
ブロックに注意
さっきの実装
•Twisted - Python
•EventMachine - Ruby
•AnyEvent - Perl
これらはブロックを禁止していない。
だからブッロクの有る処理が混じると
パフォーマンスに影響がでてしまう。
2010年11月21日日曜日
ノンブロックの強制
そこで、
「普通にやってれば絶対にブロックしない」
(ノンブロックを強制する)
ようにしてしまえば解決だろ!
と考えた人が居た。
Ryan Dahl
←この人
2010年11月21日日曜日
最適な言語は?
ちょっと前の話をまとめると、
•シングルスレッドである
•イベントループを持つ
そんな言語が良い。
そこにノンブロックなAPIを実装すれば勝つる!
2010年11月21日日曜日
JavaScript !!
Q: シングルスレッドですか?
A:「あー、ワーカーとか使わなければ基本そうっす。」
Q: イベントループ持ってる?
A: 「クリックしたら∼、とかは良くやってますよ?」
完璧!
> でも JS じゃ遅くね?
2010年11月21日日曜日
Google V8
2010年11月21日日曜日
Google V8
•メチャクチャ速いJS実装。
•中間コードなし直コンパイル。
•C++ からも色々使いやすい。
•C++ でアドオンも書ける。
2010年11月21日日曜日
ここまでのまとめ
Node.js とは、
シングルスレッドで、イベントループを持っていた JS に
ノンブロッキングな API を添えて、超速い V8 上で動く
様にしたサーバーサイド JavaScript 実行環境。
ただ単に「サーバも JS で書きたい」という理由以上
に、JavaScript が Ryan の要求を満たしていた。
もし満たしてなかったら、別の言語になってたかも。
2010年11月21日日曜日
Node.js ++
• 少ないメモリで沢山さばける。
• V8 なので速い。
• 最初からブロックしない仕様になってる。
• 難しいマルチスレッドプログラミングをしな
いで良い。
• JavaScript で書ける。
2010年11月21日日曜日
Node.js --
• CPUにもの凄い負荷のかかる処理(CPU Heavy)は苦手
• マルチコア環境を使いこなせない
これは将来 Worker を使って解決の予定
• 処理してない例外が発生するとイベントループ全体が止ま
る
uncaughtException という機構がある。
• コールバック入れ子の嵐
Defferd とか使う
• Windows.. orz
つ VM
2010年11月21日日曜日
Dive Into Node.js !!
2010年11月21日日曜日
Node.js でプログラミング
•Event Driven(Event Emitter)
•ECMA 5th edition
•Common JS
•No Cross Browser
•Same language in Client &
Server
2010年11月21日日曜日
Event Emitter
•イベント用オブジェクト、こんなのが沢山出てくる。
•今までのイベントと基本同じ考え方
emitter.on(‘event’,callback); // bind
emitter.emit(‘event’); // trigger
$(‘div’).bind(‘event’,callback);
$(‘div’).trigger(‘event’);
2010年11月21日日曜日
ECMA 5th edition
基本は 3rd で、全部ではないが 5th も使える。
• getter/setter Syntax
• Property Descriptor
• Native JSON Object
• Array.prototype.(map¦reduce¦filter)
etc
2010年11月21日日曜日
Common JS
JavaScript のモジュールやテストに関する共通仕様。
今対応しているのは以下の二つ。
* Modules 1.0
(require, exports ...)
* Unit Testing 1.0
(Asssert ...)
2010年11月21日日曜日
No Cross Browser
2010年11月21日日曜日
Node.js の得意分野
•リアルタイムWeb的なアプリ。
Ajax, Comet, WebSocket etc
•重たいI/Oを伴うアプリ。
ファイルアップロードとか
•クライアントでもJSを沢山書くアプリ。
共通の言語で全部書ける
2010年11月21日日曜日
Node.js を始めるには
言語 環境管理 パッケージ管理
Ruby rvm gem
Python Virtualenv PyPI
Perl Perlbrew CPAN
node nave npm
2010年11月21日日曜日
Node.js で "HelloThe World!!"
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('The World!!n');
}).listen(8124);
console.log('Server running at http://127.0.0.1:8124/');
2010年11月21日日曜日
Socket.IO で WebSocket
•Socket.io
WebSocket の定番ライブラリ。
WebSocket が無いブラウザでも動く様
になってる。
WebSocket は Node.js との相性がい
い。
2010年11月21日日曜日
Socket.io
WebSocketが無かったら
(フォールバック)
• Adobe Flash Socket
• ActiveX HTMLFile (IE)
• XHR with multipart encoding
• XHR with long-polling
• JSONP polling (for cross-
domain)
サポートするブラウザ
• Safari 4
• Google Chrome 5
• Internet Explorer 6
• Internet Explorer 7
• Internet Explorer 8
• iPhone Safari
• iPad Safari
• Firefox 3
• Firefox 4 (Minefield)
• Opera 10.61
2010年11月21日日曜日
Socket.io サーバ側
var socketio = require('socket.io');
var io = socketio.listen(server);
io.on('connection', function(client) { //接続イベント
client.on('message', function(message) { //受信イベント
//クライアントがメッセージを送って来たら実行される。
//messageが送られて来たデータ
client.send(message); //送って来た本人だけに送る。
client.broadcast(message); //送って来た人以外全員に送る。
});
});
2010年11月21日日曜日
Socket.io クライアント側
$(function() {
var socket = new io.Socket(null, {port: 8080});
socket.connect();
$('#button').click(function() { // 送信
socket.send('message');
return false;
});
socket.on('message', function(obj) { // 受信ベント
$('#output').text(obj);
});
});
2010年11月21日日曜日
他のモジュール
•FW
Express (like Sinatra), etc
•Template
ejs(like erb), haml, sass, Jade, etc
•RDB
sqlite, mysql, postgresql, etc
•KVS
couch, mongodb, redis, etc
•Test/Spec
Vows, jasmine, Qunit, etc
2010年11月21日日曜日
実装例
•Node Knock Out
•http://nodeknockout.com/
•48時間の Node.js 耐久ハッカソン
•リアルタイムWebな作品が多い
2010年11月21日日曜日
日本語リソース
JP User Group : http://nodejs.jp/
@yssk22 hands on : http://bit.ly/a7Mm5i
@meso hands on : http://bit.ly/bNSDyD
@bad_at_math :
node.js とは何か : http://bit.ly/bdfrbz
2010年11月21日日曜日
他参考資料
• 本家: http://nodejs.org/
• JSConf09 Slide: http://bit.ly/6lZvhy
• JSConf10 Slide: http://bit.ly/c67UQB
• Knockout: http://nodeknockout.com/
• Bench: http://bit.ly/ao3zc5
• C10K: http://bit.ly/N2DWS
2010年11月21日日曜日
That's All
Thank You.
2010年11月21日日曜日
Question?
2010年11月21日日曜日

More Related Content

What's hot

What's hot (20)

20120222
2012022220120222
20120222
 
OSC2017 Hokkaido. MySQL今こそインストールを極めよう~改めて考える環境構築~
OSC2017 Hokkaido. MySQL今こそインストールを極めよう~改めて考える環境構築~OSC2017 Hokkaido. MySQL今こそインストールを極めよう~改めて考える環境構築~
OSC2017 Hokkaido. MySQL今こそインストールを極めよう~改めて考える環境構築~
 
AWSのRedHatにMySQL最速インストール
AWSのRedHatにMySQL最速インストールAWSのRedHatにMySQL最速インストール
AWSのRedHatにMySQL最速インストール
 
FreeBSDで行こう for small server
FreeBSDで行こう for small serverFreeBSDで行こう for small server
FreeBSDで行こう for small server
 
Bsd suki
Bsd sukiBsd suki
Bsd suki
 
Zrouter
ZrouterZrouter
Zrouter
 
openSUSEで最強仮想環境をつくろう - ゲーミングから仮想通貨まで - OSC名古屋2017セミナー資料
openSUSEで最強仮想環境をつくろう - ゲーミングから仮想通貨まで - OSC名古屋2017セミナー資料openSUSEで最強仮想環境をつくろう - ゲーミングから仮想通貨まで - OSC名古屋2017セミナー資料
openSUSEで最強仮想環境をつくろう - ゲーミングから仮想通貨まで - OSC名古屋2017セミナー資料
 
後期第六回ネットワークチーム講座資料2016
後期第六回ネットワークチーム講座資料2016後期第六回ネットワークチーム講座資料2016
後期第六回ネットワークチーム講座資料2016
 
Node.js×mongo dbで3年間サービス運用してみた話
Node.js×mongo dbで3年間サービス運用してみた話Node.js×mongo dbで3年間サービス運用してみた話
Node.js×mongo dbで3年間サービス運用してみた話
 
qpstudy05 lignhing talk - virtio
qpstudy05 lignhing talk - virtioqpstudy05 lignhing talk - virtio
qpstudy05 lignhing talk - virtio
 
virtio勉強会 #1 「virtioの基本的なところ(DRAFT版)」
virtio勉強会 #1 「virtioの基本的なところ(DRAFT版)」virtio勉強会 #1 「virtioの基本的なところ(DRAFT版)」
virtio勉強会 #1 「virtioの基本的なところ(DRAFT版)」
 
アーカイブ・リポジトリシステムで遊ぼう!
アーカイブ・リポジトリシステムで遊ぼう!アーカイブ・リポジトリシステムで遊ぼう!
アーカイブ・リポジトリシステムで遊ぼう!
 
FreeBSD の小ネタ
FreeBSD の小ネタFreeBSD の小ネタ
FreeBSD の小ネタ
 
講座Linux入門・サーバOSとしてのLinux
講座Linux入門・サーバOSとしてのLinux講座Linux入門・サーバOSとしてのLinux
講座Linux入門・サーバOSとしてのLinux
 
Osc201703 tokyo-clonezilla-v1.2 j
Osc201703 tokyo-clonezilla-v1.2 jOsc201703 tokyo-clonezilla-v1.2 j
Osc201703 tokyo-clonezilla-v1.2 j
 
WSL2使ってみた / Preview for WSL2
WSL2使ってみた / Preview for WSL2WSL2使ってみた / Preview for WSL2
WSL2使ってみた / Preview for WSL2
 
Embed Shogiboard - my first mediawiki extension -
Embed Shogiboard - my first mediawiki extension -Embed Shogiboard - my first mediawiki extension -
Embed Shogiboard - my first mediawiki extension -
 
Xenとzfsで作る家庭内VDIサーバ
Xenとzfsで作る家庭内VDIサーバXenとzfsで作る家庭内VDIサーバ
Xenとzfsで作る家庭内VDIサーバ
 
LinuxをインストールしてWebサーバーを立ち上げてみよう
LinuxをインストールしてWebサーバーを立ち上げてみようLinuxをインストールしてWebサーバーを立ち上げてみよう
LinuxをインストールしてWebサーバーを立ち上げてみよう
 
初心者がOpenIndianaで自宅サーバを作ったよって話
初心者がOpenIndianaで自宅サーバを作ったよって話初心者がOpenIndianaで自宅サーバを作ったよって話
初心者がOpenIndianaで自宅サーバを作ったよって話
 

Similar to Nodejs Introduction

Android nodejs binary-transfer_130531ss
Android nodejs binary-transfer_130531ssAndroid nodejs binary-transfer_130531ss
Android nodejs binary-transfer_130531ss
ts170
 
JavaEdge第3回ライブセッション
JavaEdge第3回ライブセッションJavaEdge第3回ライブセッション
JavaEdge第3回ライブセッション
Yoichiro Tanaka
 
Kasza smashing the_jars_j-corrected
Kasza smashing the_jars_j-correctedKasza smashing the_jars_j-corrected
Kasza smashing the_jars_j-corrected
PacSecJP
 
JBoss AS7 rev3
JBoss AS7 rev3JBoss AS7 rev3
JBoss AS7 rev3
nekop
 
Nodejs+socket ioを試す
Nodejs+socket ioを試すNodejs+socket ioを試す
Nodejs+socket ioを試す
uzundk
 
Hokuriku.net 2013 01-26 node.js
Hokuriku.net 2013 01-26 node.jsHokuriku.net 2013 01-26 node.js
Hokuriku.net 2013 01-26 node.js
Tadahiro Ishisaka
 
120512 metro styleapp_javascript
120512 metro styleapp_javascript120512 metro styleapp_javascript
120512 metro styleapp_javascript
Takayoshi Tanaka
 

Similar to Nodejs Introduction (20)

Android nodejs binary-transfer_130531ss
Android nodejs binary-transfer_130531ssAndroid nodejs binary-transfer_130531ss
Android nodejs binary-transfer_130531ss
 
Play jjug2012spring
Play jjug2012springPlay jjug2012spring
Play jjug2012spring
 
Web socket and gRPC
Web socket and gRPCWeb socket and gRPC
Web socket and gRPC
 
Node.js を選ぶとき 選ばないとき
Node.js を選ぶとき 選ばないときNode.js を選ぶとき 選ばないとき
Node.js を選ぶとき 選ばないとき
 
Firefox 3.1 In Depth (?)
Firefox 3.1 In Depth (?)Firefox 3.1 In Depth (?)
Firefox 3.1 In Depth (?)
 
JavaEdge第3回ライブセッション
JavaEdge第3回ライブセッションJavaEdge第3回ライブセッション
JavaEdge第3回ライブセッション
 
Nuxt.jsで手軽に構築するモダン・フロントエンド開発環境
Nuxt.jsで手軽に構築するモダン・フロントエンド開発環境Nuxt.jsで手軽に構築するモダン・フロントエンド開発環境
Nuxt.jsで手軽に構築するモダン・フロントエンド開発環境
 
Bp study39 nodejs
Bp study39 nodejsBp study39 nodejs
Bp study39 nodejs
 
Kasza smashing the_jars_j-corrected
Kasza smashing the_jars_j-correctedKasza smashing the_jars_j-corrected
Kasza smashing the_jars_j-corrected
 
JBoss AS7 rev3
JBoss AS7 rev3JBoss AS7 rev3
JBoss AS7 rev3
 
Oracleがnode.jsをやり始めたというのだが!
Oracleがnode.jsをやり始めたというのだが!Oracleがnode.jsをやり始めたというのだが!
Oracleがnode.jsをやり始めたというのだが!
 
WebSocket + Node.jsでつくるチャットアプリ
WebSocket + Node.jsでつくるチャットアプリWebSocket + Node.jsでつくるチャットアプリ
WebSocket + Node.jsでつくるチャットアプリ
 
Node.jsでブラウザメッセンジャー
Node.jsでブラウザメッセンジャーNode.jsでブラウザメッセンジャー
Node.jsでブラウザメッセンジャー
 
SocketStream入門
SocketStream入門SocketStream入門
SocketStream入門
 
WebStormでできること
WebStormでできることWebStormでできること
WebStormでできること
 
今日はMongoDBの話はしない
今日はMongoDBの話はしない今日はMongoDBの話はしない
今日はMongoDBの話はしない
 
DEV-010_エンプラ系業務 Web アプリ開発に効く! 実践的 SPA 型モダン Web アプリ開発の選択手法
DEV-010_エンプラ系業務 Web アプリ開発に効く! 実践的 SPA 型モダン Web アプリ開発の選択手法DEV-010_エンプラ系業務 Web アプリ開発に効く! 実践的 SPA 型モダン Web アプリ開発の選択手法
DEV-010_エンプラ系業務 Web アプリ開発に効く! 実践的 SPA 型モダン Web アプリ開発の選択手法
 
Nodejs+socket ioを試す
Nodejs+socket ioを試すNodejs+socket ioを試す
Nodejs+socket ioを試す
 
Hokuriku.net 2013 01-26 node.js
Hokuriku.net 2013 01-26 node.jsHokuriku.net 2013 01-26 node.js
Hokuriku.net 2013 01-26 node.js
 
120512 metro styleapp_javascript
120512 metro styleapp_javascript120512 metro styleapp_javascript
120512 metro styleapp_javascript
 

More from Jxck Jxck

Gtug girls meetup web socket handson
Gtug girls meetup   web socket handsonGtug girls meetup   web socket handson
Gtug girls meetup web socket handson
Jxck Jxck
 
Nodefest2011-Live
Nodefest2011-LiveNodefest2011-Live
Nodefest2011-Live
Jxck Jxck
 

More from Jxck Jxck (20)

Http2 on go1.6rc2
Http2 on go1.6rc2Http2 on go1.6rc2
Http2 on go1.6rc2
 
ORTC SVC SimulCast
ORTC SVC SimulCastORTC SVC SimulCast
ORTC SVC SimulCast
 
HTTP2 時代の Web - web over http2
HTTP2 時代の Web - web over http2HTTP2 時代の Web - web over http2
HTTP2 時代の Web - web over http2
 
Isomorphic Architecture & Interface
Isomorphic Architecture & InterfaceIsomorphic Architecture & Interface
Isomorphic Architecture & Interface
 
HTTP2 RFC 発行記念祝賀会
HTTP2 RFC 発行記念祝賀会HTTP2 RFC 発行記念祝賀会
HTTP2 RFC 発行記念祝賀会
 
Extensible web #html5j
Extensible web #html5jExtensible web #html5j
Extensible web #html5j
 
Extensible web
Extensible webExtensible web
Extensible web
 
HTTP2Study chronicle #http2conf
HTTP2Study chronicle #http2confHTTP2Study chronicle #http2conf
HTTP2Study chronicle #http2conf
 
mozaicfm-ep8 #altJS @ll-diver
mozaicfm-ep8 #altJS @ll-divermozaicfm-ep8 #altJS @ll-diver
mozaicfm-ep8 #altJS @ll-diver
 
Updates of socket.io@1.0
Updates of socket.io@1.0Updates of socket.io@1.0
Updates of socket.io@1.0
 
Why HTML Form dose not support PUT & DELETE ?
Why HTML Form dose not support PUT & DELETE ?Why HTML Form dose not support PUT & DELETE ?
Why HTML Form dose not support PUT & DELETE ?
 
Next generation web talk @cross2014
Next generation web talk @cross2014Next generation web talk @cross2014
Next generation web talk @cross2014
 
HTTP2 & HPACK #pyfes 2013-11-30
HTTP2 & HPACK #pyfes 2013-11-30HTTP2 & HPACK #pyfes 2013-11-30
HTTP2 & HPACK #pyfes 2013-11-30
 
Network server in go #gocon 2013-11-14
Network server in go  #gocon 2013-11-14Network server in go  #gocon 2013-11-14
Network server in go #gocon 2013-11-14
 
SPDY & HTTP2.0 & QUIC - #bpstudy 2013-08-28
SPDY & HTTP2.0 & QUIC - #bpstudy 2013-08-28SPDY & HTTP2.0 & QUIC - #bpstudy 2013-08-28
SPDY & HTTP2.0 & QUIC - #bpstudy 2013-08-28
 
Http2.0 Guide 2013-08-14 #http2study
Http2.0 Guide 2013-08-14 #http2studyHttp2.0 Guide 2013-08-14 #http2study
Http2.0 Guide 2013-08-14 #http2study
 
Gtug girls meetup web socket handson
Gtug girls meetup   web socket handsonGtug girls meetup   web socket handson
Gtug girls meetup web socket handson
 
Next generation web talk @cross2013
Next generation web talk @cross2013Next generation web talk @cross2013
Next generation web talk @cross2013
 
Nodefest2011-Live
Nodefest2011-LiveNodefest2011-Live
Nodefest2011-Live
 
Test it in Node.js
Test it in Node.jsTest it in Node.js
Test it in Node.js
 

Recently uploaded

Recently uploaded (7)

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 

Nodejs Introduction