From c4e5f2e3d576f1edd3cdb9b7d4303ee6708476c8 Mon Sep 17 00:00:00 2001 From: Junwei Zhao Date: Tue, 12 Jun 2018 14:53:05 +1000 Subject: [PATCH] Add some things about websocket --- assets/images/websocket-diagram.png | Bin 0 -> 34620 bytes categories/web.md | 16 ++++++++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 assets/images/websocket-diagram.png diff --git a/assets/images/websocket-diagram.png b/assets/images/websocket-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..1064923f7764760dfae6d21950676a89030c9917 GIT binary patch literal 34620 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 X>sI2GT${dqoj^@l`+1e3ZN&coue%Af literal 0 HcmV?d00001 diff --git a/categories/web.md b/categories/web.md index 5b97457..d88b4f7 100644 --- a/categories/web.md +++ b/categories/web.md @@ -61,8 +61,18 @@ Frames: # Websocket +WebSocket is a computer communications protocol, providing full-duplex communication channels over a single TCP connection. The WebSocket protocol was standardized by the IETF as RFC 6455 in 2011, and the WebSocket API in Web IDL is being standardized by the W3C. WebSocket is a different TCP protocol from HTTP. + +## Frameworks and tools + - Pusher - Socket.IO +- Pubnub + +## How Websocket works + +![Diagram](https://raw.githubusercontent.com/wahyd4/knowledge-mind-mapping/master/assets/images/websocket-diagram.png) + # json-schema @@ -83,10 +93,12 @@ Frames: ## How browser works? -* How browser render web page +How browser render web page + ![how browser render web page](https://raw.githubusercontent.com/wahyd4/knowledge-mind-mapping/master/assets/images/how-browser-works.png) -* The flow diagram when you access a website +The flow diagram when you access a website + ![Flow](https://raw.githubusercontent.com/wahyd4/knowledge-mind-mapping/master/assets/images/http-flow.jpg) # CSS