SlideShare une entreprise Scribd logo
1  sur  25
Télécharger pour lire hors ligne
Node.js
Surabaya, 24 April 2014
ICROSS 2014
Mohammad Anwari
@aksimdamt
Mulai melangkah dengan
© 2014 Mohammad Anwari
CC-by-SA
Permasalahan
input = getInput();
result = query(“select * from db where
id=?”, input);
displayResult(result);
input = getInput();
result = query(“select * from db where
id=?”, input);
displayResult(result);
apa yang kebanyakan program lakukan
saat menunggu hasil dari fungsi query?
diam
Pendekatan solusi
● multithread
○ context-switch
○ memory per thread
○ execution stack
○ os thread vs green thread
● event loop
Multithread
input = getInput();
result = query(“select * from db
where id=?”, input);
displayResult(result);
satu pengguna
Multithread
input = getInput();
result = query(“select * from db
where id=?”, input);
displayResult(result);
input = getInput();
result = query(“select * from db
where id=?”, input);
displayResult(result);
input = getInput();
result = query(“select * from db
where id=?”, input);
displayResult(result);
input = getInput();
result = query(“select * from db
where id=?”, input);
displayResult(result);
banyak pengguna
Event loop
input = getInput();
result = query(“select * from db
where id=?”, input);
satu pengguna
displayResult(result);
Event loop
banyak pengguna
input = getInput();
result = query(“select * from db
where id=?”, input);
displayResult(result);
input = getInput();
result = query(“select * from db
where id=?”, input);
displayResult(result);
input = getInput();
result = query(“select * from db
where id=?”, input);
displayResult(result);
Kenapa tidak pakai event loop?
● tidak semua bahasa pemrograman
mendukung
● bisa membuat kode tampak rumit
● kebanyakan pustaka program tidak
mendukung operasi asinkronus
Closure
input = getInput();
result = query(“select * from db where
id=?”, input, function(result) {
displayResult(result);
})
Kenapa JavaScript?
● Mendukung pemrograman non-
blocking dan async
● Hanya perlu satu kompetensi untuk
pengembangan sistem di depan dan di
belakang
Hati-hati
Sangat memungkinkan pemrograman
gaya koboi
Node.js
platform pengembangan aplikasi diciptakan oleh Ryan Dahl (2009)
➔ ditenagai oleh mesin JavaScript V8
◆ dibuat oleh Google
◆ ECMAScript
◆ bahasa C++
➔ fokus pada kinerja cepat
◆ non-blocking
◆ async events
Arsitektur
Pustaka inti Node.js
V8 libuv
lem
sistem operasi
aplikasi
JavaScript
C/C++
var net = require('net');
net.createServer(
function (stream) {
stream.write('hellorn');
stream.on('end',
function () {
console.log('goodbyern');
}
);
stream.pipe(stream);
}
).listen(8000);
var net = require('net');
net.createServer(
function (stream) {
stream.write('hellorn');
stream.on('end',
function () {
console.log('goodbyern');
}
);
stream.pipe(stream);
}
).listen(8000);
var net = require('net');
net.createServer(
function (stream) {
stream.write('hellorn');
stream.on('end',
function () {
console.log('goodbyern');
}
);
stream.pipe(stream);
}
).listen(8000);
var net = require('net');
var server = function(stream) {
var end = function() {
console.log('goodbyern');
}
stream.write('hellorn');
stream.on('end', end);
stream.pipe(stream);
}
net.createServer(server).listen(8000);
Instalasi
http://w.blankon.in/U1
REPL
$ node
Modul
● Kumpulan pustaka program dan
peralatan pengembangan
○ Menyediakan fungsi-fungsi spesifik
● Pengembangan aplikasi semakin
mudah
● Lisensi F/OSS
● Global
○ Dapat digunakan di keseluruhan sistem
○ Digunakan untuk alat bantu pengembangan
● Lokal
○ Digunakan pada spesifik pada proyek
pengembangan
■ Digunakan pada tahap pengembangan saja
■ Digunakan pada produksi saja
Modul
NPM
Tata kelola paket Node.js

Contenu connexe

Tendances

Tutorial pembuatan REST Service pada Support System menggunakan Servlet dan GSON
Tutorial pembuatan REST Service pada Support System menggunakan Servlet dan GSONTutorial pembuatan REST Service pada Support System menggunakan Servlet dan GSON
Tutorial pembuatan REST Service pada Support System menggunakan Servlet dan GSONDimas Prawira
 
Tutorial Penggunaan Laravel
Tutorial Penggunaan LaravelTutorial Penggunaan Laravel
Tutorial Penggunaan LaravelEka Rahmawati
 
Ci indonesia
Ci indonesiaCi indonesia
Ci indonesiakaniadona
 
Pengenalan pemrograman java
Pengenalan pemrograman javaPengenalan pemrograman java
Pengenalan pemrograman javaWiEn SHipiet
 
Tutorial web service (web & client) with spring web services
Tutorial web service (web & client) with spring web servicesTutorial web service (web & client) with spring web services
Tutorial web service (web & client) with spring web servicesmuhammad arif nasution
 

Tendances (9)

Presentasi java
Presentasi javaPresentasi java
Presentasi java
 
Java netbeans
Java netbeansJava netbeans
Java netbeans
 
Tutorial pembuatan REST Service pada Support System menggunakan Servlet dan GSON
Tutorial pembuatan REST Service pada Support System menggunakan Servlet dan GSONTutorial pembuatan REST Service pada Support System menggunakan Servlet dan GSON
Tutorial pembuatan REST Service pada Support System menggunakan Servlet dan GSON
 
Tutorial Penggunaan Laravel
Tutorial Penggunaan LaravelTutorial Penggunaan Laravel
Tutorial Penggunaan Laravel
 
Ci indonesia
Ci indonesiaCi indonesia
Ci indonesia
 
Pengenalan pemrograman java
Pengenalan pemrograman javaPengenalan pemrograman java
Pengenalan pemrograman java
 
Tutorial web service (web & client) with spring web services
Tutorial web service (web & client) with spring web servicesTutorial web service (web & client) with spring web services
Tutorial web service (web & client) with spring web services
 
Ci 1
Ci 1Ci 1
Ci 1
 
Mari belajar vue js
Mari belajar vue jsMari belajar vue js
Mari belajar vue js
 

En vedette

Domain name system dinamis dengan protokol dinamid versi 1.02
Domain name system dinamis dengan protokol dinamid versi 1.02Domain name system dinamis dengan protokol dinamid versi 1.02
Domain name system dinamis dengan protokol dinamid versi 1.02Mohammad Anwari
 
PortableApps on Fedora 10 LiveUSB
PortableApps on Fedora 10 LiveUSBPortableApps on Fedora 10 LiveUSB
PortableApps on Fedora 10 LiveUSBvargy
 
Macam2 sertifikasi linux
Macam2 sertifikasi linuxMacam2 sertifikasi linux
Macam2 sertifikasi linuxsabtolinux
 
Skalabilitas Aplikasi Web
Skalabilitas Aplikasi WebSkalabilitas Aplikasi Web
Skalabilitas Aplikasi WebMohammad Anwari
 
Panduan praktikum jaringan & packet tracer
Panduan praktikum jaringan & packet tracerPanduan praktikum jaringan & packet tracer
Panduan praktikum jaringan & packet tracervianovian
 
Introduction into R for historians (part 1: introduction)
Introduction into R for historians (part 1: introduction)Introduction into R for historians (part 1: introduction)
Introduction into R for historians (part 1: introduction)Richard Zijdeman
 
OpenOffice.Org Impress Tutorial
OpenOffice.Org Impress TutorialOpenOffice.Org Impress Tutorial
OpenOffice.Org Impress Tutorialvargy
 
Best Practices with IPS on Oracle Solaris 11
Best Practices with IPS on Oracle Solaris 11Best Practices with IPS on Oracle Solaris 11
Best Practices with IPS on Oracle Solaris 11glynnfoster
 
Ft tx presentation to telkom 25092013
Ft tx presentation to telkom 25092013Ft tx presentation to telkom 25092013
Ft tx presentation to telkom 25092013Wahyu Nasution
 
FOSS and Linux
FOSS and LinuxFOSS and Linux
FOSS and Linuxvargy
 
Manual guide briker IP PABX
Manual guide briker IP PABX Manual guide briker IP PABX
Manual guide briker IP PABX Wahyu Nasution
 

En vedette (20)

Lokakarya penerjemah blank on 9.0
Lokakarya penerjemah blank on 9.0Lokakarya penerjemah blank on 9.0
Lokakarya penerjemah blank on 9.0
 
Database optimization 2
Database optimization 2Database optimization 2
Database optimization 2
 
Database optimization
Database optimizationDatabase optimization
Database optimization
 
Pemaketan blankon-i
Pemaketan blankon-iPemaketan blankon-i
Pemaketan blankon-i
 
TUTORIAL INSTALASI LIBREOFFICE FOR LINUX MINT
TUTORIAL INSTALASI LIBREOFFICE FOR LINUX MINTTUTORIAL INSTALASI LIBREOFFICE FOR LINUX MINT
TUTORIAL INSTALASI LIBREOFFICE FOR LINUX MINT
 
Domain name system dinamis dengan protokol dinamid versi 1.02
Domain name system dinamis dengan protokol dinamid versi 1.02Domain name system dinamis dengan protokol dinamid versi 1.02
Domain name system dinamis dengan protokol dinamid versi 1.02
 
En game hacking
En game hackingEn game hacking
En game hacking
 
PortableApps on Fedora 10 LiveUSB
PortableApps on Fedora 10 LiveUSBPortableApps on Fedora 10 LiveUSB
PortableApps on Fedora 10 LiveUSB
 
Debian Tutorial
Debian TutorialDebian Tutorial
Debian Tutorial
 
Pemaketan blankon-ii
Pemaketan blankon-iiPemaketan blankon-ii
Pemaketan blankon-ii
 
Macam2 sertifikasi linux
Macam2 sertifikasi linuxMacam2 sertifikasi linux
Macam2 sertifikasi linux
 
Skalabilitas Aplikasi Web
Skalabilitas Aplikasi WebSkalabilitas Aplikasi Web
Skalabilitas Aplikasi Web
 
Laporan praktikum jarkom
Laporan praktikum jarkomLaporan praktikum jarkom
Laporan praktikum jarkom
 
Panduan praktikum jaringan & packet tracer
Panduan praktikum jaringan & packet tracerPanduan praktikum jaringan & packet tracer
Panduan praktikum jaringan & packet tracer
 
Introduction into R for historians (part 1: introduction)
Introduction into R for historians (part 1: introduction)Introduction into R for historians (part 1: introduction)
Introduction into R for historians (part 1: introduction)
 
OpenOffice.Org Impress Tutorial
OpenOffice.Org Impress TutorialOpenOffice.Org Impress Tutorial
OpenOffice.Org Impress Tutorial
 
Best Practices with IPS on Oracle Solaris 11
Best Practices with IPS on Oracle Solaris 11Best Practices with IPS on Oracle Solaris 11
Best Practices with IPS on Oracle Solaris 11
 
Ft tx presentation to telkom 25092013
Ft tx presentation to telkom 25092013Ft tx presentation to telkom 25092013
Ft tx presentation to telkom 25092013
 
FOSS and Linux
FOSS and LinuxFOSS and Linux
FOSS and Linux
 
Manual guide briker IP PABX
Manual guide briker IP PABX Manual guide briker IP PABX
Manual guide briker IP PABX
 

Similaire à Nodejs Event Loop

Dicoding Developer Coaching #23: Android | Membangun Modern App dengan Jetpac...
Dicoding Developer Coaching #23: Android | Membangun Modern App dengan Jetpac...Dicoding Developer Coaching #23: Android | Membangun Modern App dengan Jetpac...
Dicoding Developer Coaching #23: Android | Membangun Modern App dengan Jetpac...DicodingEvent
 
Berkenalan dengan bahasa php pemrograman web
Berkenalan dengan bahasa php   pemrograman webBerkenalan dengan bahasa php   pemrograman web
Berkenalan dengan bahasa php pemrograman webVicky Nitinegoro
 
Octav android mysql
Octav android mysqlOctav android mysql
Octav android mysqlrikysp
 
Pengenalan Dasar NodeJS
Pengenalan Dasar NodeJSPengenalan Dasar NodeJS
Pengenalan Dasar NodeJSalfi setyadi
 
Laporan program chatting client server
Laporan program chatting client serverLaporan program chatting client server
Laporan program chatting client serverRara Ariesta
 
Struktur Pemrograman Java
Struktur Pemrograman JavaStruktur Pemrograman Java
Struktur Pemrograman Javaroji muhidin
 
Program chatting
Program chattingProgram chatting
Program chattingAisy Cuyy
 
Algoritma dan Pemrograman C++ (Program Structure)
Algoritma dan Pemrograman C++ (Program Structure)Algoritma dan Pemrograman C++ (Program Structure)
Algoritma dan Pemrograman C++ (Program Structure)Nabil Muhammad Firdaus
 
Cara Membuat Aplikasi Android Resep Masakan Sederhana Android-SQLite
Cara Membuat Aplikasi Android Resep Masakan Sederhana Android-SQLiteCara Membuat Aplikasi Android Resep Masakan Sederhana Android-SQLite
Cara Membuat Aplikasi Android Resep Masakan Sederhana Android-SQLitecreatorb dev
 
Optimize php application in high traffic environment
Optimize php application in high traffic environmentOptimize php application in high traffic environment
Optimize php application in high traffic environmentk4ndar
 
Membuat Aplikasi Chatting Client Server Dengan Pemrograman Java
Membuat Aplikasi Chatting Client Server Dengan Pemrograman JavaMembuat Aplikasi Chatting Client Server Dengan Pemrograman Java
Membuat Aplikasi Chatting Client Server Dengan Pemrograman Javayoyomay93
 
Operasi bahasa java
Operasi bahasa javaOperasi bahasa java
Operasi bahasa javaMAFauzan
 
Operasi bahasa java
Operasi bahasa javaOperasi bahasa java
Operasi bahasa javarezkyputraa
 
Understanding asynchronous process on website
Understanding asynchronous process on websiteUnderstanding asynchronous process on website
Understanding asynchronous process on websiteRizal Asrul Pambudi
 
Soal try out rpl 2014
Soal try out rpl 2014Soal try out rpl 2014
Soal try out rpl 2014Rose Athy
 
Laporan program chatting
Laporan program chattingLaporan program chatting
Laporan program chattingganteng8
 
Pemrograman Bergerak Pertemuan 9.pdf
Pemrograman Bergerak Pertemuan 9.pdfPemrograman Bergerak Pertemuan 9.pdf
Pemrograman Bergerak Pertemuan 9.pdfHendroGunawan8
 
Membuat aplikasi chat menggunakan java
Membuat aplikasi chat menggunakan javaMembuat aplikasi chat menggunakan java
Membuat aplikasi chat menggunakan javaEko Kurniawan Khannedy
 

Similaire à Nodejs Event Loop (20)

Dicoding Developer Coaching #23: Android | Membangun Modern App dengan Jetpac...
Dicoding Developer Coaching #23: Android | Membangun Modern App dengan Jetpac...Dicoding Developer Coaching #23: Android | Membangun Modern App dengan Jetpac...
Dicoding Developer Coaching #23: Android | Membangun Modern App dengan Jetpac...
 
Berkenalan dengan bahasa php pemrograman web
Berkenalan dengan bahasa php   pemrograman webBerkenalan dengan bahasa php   pemrograman web
Berkenalan dengan bahasa php pemrograman web
 
Octav android mysql
Octav android mysqlOctav android mysql
Octav android mysql
 
Pengenalan Dasar NodeJS
Pengenalan Dasar NodeJSPengenalan Dasar NodeJS
Pengenalan Dasar NodeJS
 
Laporan program chatting client server
Laporan program chatting client serverLaporan program chatting client server
Laporan program chatting client server
 
Struktur Pemrograman Java
Struktur Pemrograman JavaStruktur Pemrograman Java
Struktur Pemrograman Java
 
Program chatting
Program chattingProgram chatting
Program chatting
 
Algoritma dan Pemrograman C++ (Program Structure)
Algoritma dan Pemrograman C++ (Program Structure)Algoritma dan Pemrograman C++ (Program Structure)
Algoritma dan Pemrograman C++ (Program Structure)
 
Cara Membuat Aplikasi Android Resep Masakan Sederhana Android-SQLite
Cara Membuat Aplikasi Android Resep Masakan Sederhana Android-SQLiteCara Membuat Aplikasi Android Resep Masakan Sederhana Android-SQLite
Cara Membuat Aplikasi Android Resep Masakan Sederhana Android-SQLite
 
Optimize php application in high traffic environment
Optimize php application in high traffic environmentOptimize php application in high traffic environment
Optimize php application in high traffic environment
 
Workshop On eCos
Workshop On eCosWorkshop On eCos
Workshop On eCos
 
Membuat Aplikasi Chatting Client Server Dengan Pemrograman Java
Membuat Aplikasi Chatting Client Server Dengan Pemrograman JavaMembuat Aplikasi Chatting Client Server Dengan Pemrograman Java
Membuat Aplikasi Chatting Client Server Dengan Pemrograman Java
 
Operasi bahasa java
Operasi bahasa javaOperasi bahasa java
Operasi bahasa java
 
Operasi bahasa java
Operasi bahasa javaOperasi bahasa java
Operasi bahasa java
 
Understanding asynchronous process on website
Understanding asynchronous process on websiteUnderstanding asynchronous process on website
Understanding asynchronous process on website
 
Soal try out rpl 2014
Soal try out rpl 2014Soal try out rpl 2014
Soal try out rpl 2014
 
Modul PBO Bab-11 - JDBC
Modul PBO Bab-11 - JDBCModul PBO Bab-11 - JDBC
Modul PBO Bab-11 - JDBC
 
Laporan program chatting
Laporan program chattingLaporan program chatting
Laporan program chatting
 
Pemrograman Bergerak Pertemuan 9.pdf
Pemrograman Bergerak Pertemuan 9.pdfPemrograman Bergerak Pertemuan 9.pdf
Pemrograman Bergerak Pertemuan 9.pdf
 
Membuat aplikasi chat menggunakan java
Membuat aplikasi chat menggunakan javaMembuat aplikasi chat menggunakan java
Membuat aplikasi chat menggunakan java
 

Plus de Mohammad Anwari

GNOME.Asia 2015: BlankOn Linux Architecture
GNOME.Asia 2015:  BlankOn Linux ArchitectureGNOME.Asia 2015:  BlankOn Linux Architecture
GNOME.Asia 2015: BlankOn Linux ArchitectureMohammad Anwari
 
BlankOn dan PSrE Induk Nasional
BlankOn dan PSrE Induk NasionalBlankOn dan PSrE Induk Nasional
BlankOn dan PSrE Induk NasionalMohammad Anwari
 
Lokakarya Manokwari - ICROSS 2013
Lokakarya Manokwari - ICROSS 2013Lokakarya Manokwari - ICROSS 2013
Lokakarya Manokwari - ICROSS 2013Mohammad Anwari
 
Manokwari: HTML5 desktop built with gnome
Manokwari: HTML5 desktop built with gnomeManokwari: HTML5 desktop built with gnome
Manokwari: HTML5 desktop built with gnomeMohammad Anwari
 
MeeGo Touch Input Method Framework
MeeGo Touch Input Method FrameworkMeeGo Touch Input Method Framework
MeeGo Touch Input Method FrameworkMohammad Anwari
 
Arsitektur Sistem Operasi BlankOn 201104
Arsitektur Sistem Operasi BlankOn 201104Arsitektur Sistem Operasi BlankOn 201104
Arsitektur Sistem Operasi BlankOn 201104Mohammad Anwari
 
Kegiatan Riset BlankOn 2011-2012
Kegiatan Riset BlankOn 2011-2012Kegiatan Riset BlankOn 2011-2012
Kegiatan Riset BlankOn 2011-2012Mohammad Anwari
 

Plus de Mohammad Anwari (12)

GNOME.Asia 2015: BlankOn Linux Architecture
GNOME.Asia 2015:  BlankOn Linux ArchitectureGNOME.Asia 2015:  BlankOn Linux Architecture
GNOME.Asia 2015: BlankOn Linux Architecture
 
Liku liku F/OSS
Liku liku F/OSSLiku liku F/OSS
Liku liku F/OSS
 
Ganasnya industri
Ganasnya industriGanasnya industri
Ganasnya industri
 
BlankOn dan PSrE Induk Nasional
BlankOn dan PSrE Induk NasionalBlankOn dan PSrE Induk Nasional
BlankOn dan PSrE Induk Nasional
 
JS di Destop
JS di Destop JS di Destop
JS di Destop
 
Lokakarya Manokwari - ICROSS 2013
Lokakarya Manokwari - ICROSS 2013Lokakarya Manokwari - ICROSS 2013
Lokakarya Manokwari - ICROSS 2013
 
Manokwari: HTML5 desktop built with gnome
Manokwari: HTML5 desktop built with gnomeManokwari: HTML5 desktop built with gnome
Manokwari: HTML5 desktop built with gnome
 
Blankon dan Debian
Blankon dan DebianBlankon dan Debian
Blankon dan Debian
 
BOF Srimubil 2009
BOF Srimubil 2009BOF Srimubil 2009
BOF Srimubil 2009
 
MeeGo Touch Input Method Framework
MeeGo Touch Input Method FrameworkMeeGo Touch Input Method Framework
MeeGo Touch Input Method Framework
 
Arsitektur Sistem Operasi BlankOn 201104
Arsitektur Sistem Operasi BlankOn 201104Arsitektur Sistem Operasi BlankOn 201104
Arsitektur Sistem Operasi BlankOn 201104
 
Kegiatan Riset BlankOn 2011-2012
Kegiatan Riset BlankOn 2011-2012Kegiatan Riset BlankOn 2011-2012
Kegiatan Riset BlankOn 2011-2012
 

Nodejs Event Loop

  • 1. Node.js Surabaya, 24 April 2014 ICROSS 2014 Mohammad Anwari @aksimdamt Mulai melangkah dengan
  • 2. © 2014 Mohammad Anwari CC-by-SA
  • 3. Permasalahan input = getInput(); result = query(“select * from db where id=?”, input); displayResult(result);
  • 4. input = getInput(); result = query(“select * from db where id=?”, input); displayResult(result); apa yang kebanyakan program lakukan saat menunggu hasil dari fungsi query? diam
  • 5. Pendekatan solusi ● multithread ○ context-switch ○ memory per thread ○ execution stack ○ os thread vs green thread ● event loop
  • 6. Multithread input = getInput(); result = query(“select * from db where id=?”, input); displayResult(result); satu pengguna
  • 7. Multithread input = getInput(); result = query(“select * from db where id=?”, input); displayResult(result); input = getInput(); result = query(“select * from db where id=?”, input); displayResult(result); input = getInput(); result = query(“select * from db where id=?”, input); displayResult(result); input = getInput(); result = query(“select * from db where id=?”, input); displayResult(result); banyak pengguna
  • 8. Event loop input = getInput(); result = query(“select * from db where id=?”, input); satu pengguna displayResult(result);
  • 9. Event loop banyak pengguna input = getInput(); result = query(“select * from db where id=?”, input); displayResult(result); input = getInput(); result = query(“select * from db where id=?”, input); displayResult(result); input = getInput(); result = query(“select * from db where id=?”, input); displayResult(result);
  • 10. Kenapa tidak pakai event loop? ● tidak semua bahasa pemrograman mendukung ● bisa membuat kode tampak rumit ● kebanyakan pustaka program tidak mendukung operasi asinkronus
  • 11. Closure input = getInput(); result = query(“select * from db where id=?”, input, function(result) { displayResult(result); })
  • 12. Kenapa JavaScript? ● Mendukung pemrograman non- blocking dan async ● Hanya perlu satu kompetensi untuk pengembangan sistem di depan dan di belakang
  • 14. Node.js platform pengembangan aplikasi diciptakan oleh Ryan Dahl (2009) ➔ ditenagai oleh mesin JavaScript V8 ◆ dibuat oleh Google ◆ ECMAScript ◆ bahasa C++ ➔ fokus pada kinerja cepat ◆ non-blocking ◆ async events
  • 15. Arsitektur Pustaka inti Node.js V8 libuv lem sistem operasi aplikasi JavaScript C/C++
  • 16. var net = require('net'); net.createServer( function (stream) { stream.write('hellorn'); stream.on('end', function () { console.log('goodbyern'); } ); stream.pipe(stream); } ).listen(8000);
  • 17. var net = require('net'); net.createServer( function (stream) { stream.write('hellorn'); stream.on('end', function () { console.log('goodbyern'); } ); stream.pipe(stream); } ).listen(8000);
  • 18. var net = require('net'); net.createServer( function (stream) { stream.write('hellorn'); stream.on('end', function () { console.log('goodbyern'); } ); stream.pipe(stream); } ).listen(8000);
  • 19.
  • 20. var net = require('net'); var server = function(stream) { var end = function() { console.log('goodbyern'); } stream.write('hellorn'); stream.on('end', end); stream.pipe(stream); } net.createServer(server).listen(8000);
  • 23. Modul ● Kumpulan pustaka program dan peralatan pengembangan ○ Menyediakan fungsi-fungsi spesifik ● Pengembangan aplikasi semakin mudah ● Lisensi F/OSS
  • 24. ● Global ○ Dapat digunakan di keseluruhan sistem ○ Digunakan untuk alat bantu pengembangan ● Lokal ○ Digunakan pada spesifik pada proyek pengembangan ■ Digunakan pada tahap pengembangan saja ■ Digunakan pada produksi saja Modul