40

Inside node.js

Embed Size (px)

DESCRIPTION

소스코드로 살펴보는 node.js의 구조와 성능 원리, 그리고 주의점

Citation preview

Page 1: Inside node.js
Page 2: Inside node.js

Page 3: Inside node.js
Page 4: Inside node.js

Page 5: Inside node.js

http://socialmetrics.co.kr/searchKeywordMap.html

Page 6: Inside node.js

http://www.google.com/trends/

Page 7: Inside node.js

Page 8: Inside node.js

Page 9: Inside node.js

Page 10: Inside node.js
Page 11: Inside node.js

Page 12: Inside node.js

Page 13: Inside node.js
Page 14: Inside node.js

Page 15: Inside node.js

http://blog.gopivotal.com/cloud-foundry-pivotal/products/future-proofing-your-apps-cloud-foundry-and-node-js

Page 16: Inside node.js
Page 17: Inside node.js

http://blog.gopivotal.com/cloud-foundry-pivotal/products/future-proofing-your-apps-cloud-foundry-and-node-js

Page 18: Inside node.js
Page 19: Inside node.js

Page 20: Inside node.js

Page 21: Inside node.js

C/C++ libraries

node bindings

standard libraries

application codes

javascript

C/C++

Page 22: Inside node.js

node

lib src

uv

cares

http_parser

openssl

V8

zlib

standardlibraries

nodebindings

zlib

event, non-block I/O

async DNS library

http message parser

cryptography

javascript engine

Page 23: Inside node.js
Page 24: Inside node.js
Page 25: Inside node.js

src/node.cc

Page 26: Inside node.js

node V8 libuv

매개변수에 따라V8 컨텍스트 생성및 표준 모듈 초기화

기본 루프 실행

메인 스크립트 실행hello world 출력

IOCP 이벤트 루프 시작

Page 27: Inside node.js

open

Page 28: Inside node.js

event loopV8 I/O threadfs

fs.open()

binding

Open()

ASYNC_CALLuv_fs_open()fs__open()SET_REQ_RESULT()

데이터 출력

uv_poll_ex()uv_process_reqs()req->cb()

Page 29: Inside node.js

Page 30: Inside node.js

listen

Page 31: Inside node.js

event loopV8 libuvnet

Server.listen()

binding

Listen()

uv_listen()

acceptex()

웹 브라우저 tcp 접속 시,

uv_process_tcp_accept_req()TCPWrap::OnConnection()

Server.on(‘connection’)

Page 32: Inside node.js

event loopV8 libuv

StreamWrap::ReadStart

binding

uv_tcp_read_start()

uv_process_tcp_read_req()uv_tcp_queue_read()WSARecv()

socket.on(‘end’)request.on(‘end’)

uv_read_start()

Page 33: Inside node.js

event loopV8 libuv

StreamWrap::WriteBuffer()

binding

uv_tcp_write()

다 전송 될 때 까지계속 전송 시도전송완료 후 노티

response.on(‘end’)

uv_write()

Page 34: Inside node.js

Page 35: Inside node.js

Page 36: Inside node.js

while

Page 37: Inside node.js

web browser http

페이지 요청

event loop

리스너 실행

무한 루프

묵묵부답…서비스 불가

웹 브라우저는계속 로딩만…

Page 38: Inside node.js

• 무한루프

Page 39: Inside node.js

Page 40: Inside node.js