Contenu connexe
Similaire à 111214 node conf (20)
Plus de Kensaku Komatsu (20)
111214 node conf
- 2. • (@komasshu)
• html5
• WebSocket
• Google API Expert (HTML5)
• Microsoft Valuable Professional (IE)
- 7. easy demo
just push apps
$ vmc push hogehoge
http://cloudfoundry.com/
- 9. Architecture of
Cloud Foundry
http://www.slideshare.net/derekcollison/design-of-cloud-foundry
- 10. •
• Cloud Controller
• router
• DEA
• ...
• NATS
•
- 11. hoge.com 3000 app0
(3000)
fuga.com 3001
router
hoge.com app1
(3001) DEA
register
deploy
cloud
controller
push
- 23. point : Upgrade
Request Header (client => server)
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Response Header (server => client)
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Upgrade HTTP WebSocket
- 28. • nginx
• zip Access log HTTPS
• router
• URL routing
URL routing
unix domain
tcp socket
socket rails
(tcp socket )
80/443 sinatra
nginx router
node.js
DEA
- 29. 2
socket.io
+
transports{‘xhr-polling’}
- 30. WebSocket
nginx
• Request HTTP (502)
• tcp_proxy Patch
•
https://github.com/yaoweibin/nginx_tcp_proxy_module
- 31. nginx.conf
tcp {
upstream vcap_router {
server unix:/tmp/router.sock;
# server 127.0.0.1:2222;
# check interval=3000 rise=2 fall=5 timeout=1000;
}
tcp_nodelay off;
server {
listen 80;
server_name _;
proxy_read_timeout 200000;
proxy_send_timeout 200000;
proxy_pass vcap_router;
}
}
- 32. WebSocket
router
• HTTP Request/Response
HTTP
• WebSocket
Frames
• HTTP
- 33. dialog of router.rb
request
Header
router request/sec Router
on_headers
_complete()
unix module module node.js
nginx domain TCP socket
socket ClientConnection AppConnection
on_headers
_complete()
response
Header
response latency
- 34. WebSocket
Upgrade: websocket
WebsocketConnection
router
module TCP socket node.js
on_headers AppConnection
_complete() on_headers
unix module _complete()
nginx domain
socket ClientConnection
module
WebsocketConne TCP socket
node.js
ction WS
- 35. client_connection.rb
def on_headers_complete(headers)
....
# [kom] Check connection mode(websocket or not)
@is_websocket = (headers[UPGRADE_HEADER] == WEBSOCKET) ? true : false
Router.log.info "@is_websocket : #{@is_websocket}"
....
if (@is_websocket)
host, port = @droplet[:host], @droplet[:port]
@bound_app_conn = EM.connect(host, port, WebsocketConnection, self,
@headers, @droplet)
return
end
....
end
- 36. websocket_connection.rb
module WebsocketConnection
def initialize client, header, droplet
@client, @header, @droplet = client, header, droplet
end
def connection_completed
send_data(@header)
end
def receive_data(data)
@client.send_data(data)
end
def terminate
end
orz
end
- 42. problem
• vps ... Cent OS, 512MB plan
• Cloud Foundry
• 1GB memory
• Ubuntu10.04.2
•
- 43. router ( ∀ )
http://www.slideshare.net/derekcollison/design-of-cloud-foundry
Notes de l'éditeur
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n
- \n