Server side

ื›ื“ื™ ืœื’ืœื•ืฉ ื‘ืื™ื ื˜ืจื ื˜ ื”ืžื—ืฉื‘ ืฉืœื ื• ืฆืจื™ืš ืœื™ืฆื•ืจ ืงืฉืจ ืขื ืฉืจืช ืžืจื•ื—ืง, ืฉืžืื—ืกืŸ ืืช ื”ืืชืจ ืืœื™ื• ืื ื—ื ื• ืจื•ืฆื™ื ืœื’ืฉืช.
ืœืชื”ืœื™ืš ื–ื” ืžืกืคืจ ืฉืœื‘ื™ื

Pasted image 20230727101255.png|400

  1. ื”ื‘ืงืฉืช ื™ื•ืฆืืช ืžื”ืœืงื•ื—, ื›ืžื• ื”ืžื—ืฉื‘ ื”ืื™ืฉื™ ืฉืœื ื•.
  2. ื”ื‘ืงืฉื” ืžื’ื™ืขื” ืœืจืื•ื˜ืจ ื‘ืจืฉืช ื”ืžืงื•ืžื™ืช
  3. ื”ืจืื•ื˜ืจ ื”ืžืงื•ืžื™ ืžืขื‘ื™ืจ ืืช ื”ื‘ืงืฉื” ืœืจืื•ื˜ืจ ืฉืœ ืกืคืง ื”ืื™ื ื˜ืจื ื˜.
  4. ื”ื‘ืงืฉื” ืžื˜ื™ื™ืœืช ื‘ืจืฉืช ื”ืื™ื ื˜ืจื ื˜ ื”ื—ื™ืฆื•ื ื™ืช ื‘ื™ืŸ ืจืื•ื˜ืจื™ื, ื›ืœ ืชื—ื ื” ืžืงื“ืžืช ืืช ื”ื‘ืงืฉื” ืฆืขื“ ื ื•ืกืฃ ืืœ ื”ื™ืขื“
  5. ื‘ืกื•ืฃ ื”ืžืกืข ื”ื‘ืงืฉื” ืžื’ื™ืขื” ืืœ ื”ืฉืจืช ืฉืžืคืขื ื— ืื•ืชื” ื•ืžื—ื–ื™ืจ ืชืฉื•ื‘ื” ื‘ืžืกืœื•ืœ ื”ืคื•ืš ืขื“ ืฉื—ื•ื–ืจ ื‘ื—ื–ืจื” ืœืžื›ืฉื™ืจ.

ื”ืžืฉื™ืžื•ืช ืฉืœ ื”ืขื‘ืจืช ืžื™ื“ืข ื‘ืจืฉืช ืžืื•ืจื’ื ื•ืช ื‘ืžื‘ื ื” ืฉืœ ืฉื›ื‘ื•ืช. ื”ื—ื™ื‘ื•ืจ ื‘ื™ืŸ ืคืขื•ืœืช ื”ืฉื›ื‘ื•ืช ื”ื•ื ืฉืžืืคืฉืจ ืืช ื”ืขื‘ืจืช ื”ืžื™ื“ืข ื‘ืื™ื ื˜ืจื˜ ื›ืืฉืจ ื›ืœ ืฉื›ื‘ื” ืื—ืจืื™ืช ืขืœ ื—ืœืง ืื—ืจ ื‘ืชื”ืœื™ืš ื”ืžื•ืจื›ื‘ ืฉืœ ื”ืขื‘ืจืช ื”ืžื™ื“ืข ืœืจืฉืช ื•ื‘ื—ื–ืจื”.

ื”ืžื•ื“ืœ ื ืงืจื ืžื•ื“ืœ ื—ืžืฉืช ื”ืฉื›ื‘ื•ืช

Pasted image 20230727104120.png|200

ื ื™ืชืŸ ืœืžืžืฉ ื•ืœื”ื—ืœื™ืฃ ืืช ื”ืฉื›ื‘ื•ืช ื‘ื›ืœ ืžื™ื ื™ ืžื™ืžื•ืฉื™ื ื›ืจืฆื•ื ื ื•.

ืืชืžืงื“ ื‘ืฉื›ื‘ืช ื”ืืคืœื™ืงืฆื™ื™ื”:
ื›ื›ืฉื•ืœื—ื™ื ื‘ืงืฉืช ืื™ื ื˜ืจื ื˜ ืื ื—ื ื• ื‘ืขืฆื ืขื•ืฉื™ื ื›ืžื” ื“ื‘ืจื™ื ื‘ืจืžื” ื”ื–ืืช

  1. ืฉื•ืœื—ื™ื ื‘ืงืฉืช DNS ืœืฉืจืช DNS ืฉื–ื” ื‘ืขืฆื ืคืจื•ื˜ื•ืงื•ืœ ืฉืžืงื‘ืœ URL ื•ืžืžื™ืจ ืื•ืชื• ืœื›ืชื•ื‘ืช IP ืชืงื™ื ื”.
    ื–ื” ื’ื ืคืจื•ื˜ื•ืงื•ืœ ืฉืžืฉืชืžืฉ ื‘ืžื•ื“ืœ 5 ื”ืฉื›ื‘ื•ืช ื›ื“ื™ ืœื”ืขื‘ื™ืจ ืžื™ื“ืข ื‘ืจืžื•ืช ื”ืฉื ื•ืช
    Pasted image 20230727105755.png
  2. ื‘ืจื’ืข ืฉื™ืฉ IP ื ืฉืœื— ื‘ืงืฉืช HTTP ืœืฉืจืช ื”web ืฉื”ื•ื ืฉืจืช HTTP (ื›ืžื• ืฉื™ืฉ ืฉืจืช DNS ืฉื™ื•ื“ืข ืœื˜ืคืœ ื‘ื‘ืงืฉื•ืช ืฉืœ ื”ืคืจื•ื˜ื•ืงื•ืœ DNS ื™ืฉ ื’ื ืฉืจืช HTTP ืฉื™ื•ื“ืข ืœื˜ืคืœ ื‘ื‘ืงืฉื•ืช HTTP).
  3. ื‘ืงืฉืช ื”HTTP ืžืกื•ื’ GET ืขื•ื‘ืจืช ื‘ืฉื›ื‘ื•ืช ื”ืฉื•ื ื•ืช ืขื“ ืฉืžื’ื™ืขื” ืœืฉืจืช (ืœืžืฉืœ ื‘ืฉื›ื‘ืช ื” Transport ื ืขืฉื” ื—ื™ื‘ื•ืจ ืœืฉืจืช ื‘ืืžืฆืขื•ืช ืคืจื•ื˜ื•ืงื•ืœ TCP ื•ืื– ื”ืžื™ื“ืข ื ืฉืœื— ืœืฉื›ื‘ืช ื”ืจืฉืช).
  4. ื‘ืจื’ืข ืฉื”ื™ื ืžื’ื™ืขื” ืœืฉืจืช ื”ื™ื ืžืขื•ื‘ื“ืช ื•ืžื—ื–ื™ืจื” HTTP Response ืฉืžื›ื™ืœ ื‘ืชื•ื›ื• ืืช ื”ืงื•ื‘ืฅ HTML ื”ืžืชืื™ื ืœืจื™ื ื“ื•ืจ.
  5. ื”ื“ืคื“ืคืŸ ืžืงื‘ืœ ืืช ื”ืชื•ืฆืื” ื•ืžืจื ื“ืจ ืื•ืชื” ืขืœ ื”ืžืกืš.

ื‘ืงืฉืช GET ื ืจืืช ื›ื›ื” ืœืจื•ื‘
Pasted image 20230727110603.png|400
ื•ื‘ืื•ืคืŸ ื›ืœืœื™ ื™ื•ืชืจ ื”ืชืงืฉื•ืจืช (ื‘ืฉื›ื‘ืช ื”ืืคืœื™ืงืฆื™ื™ื”) ื ืจืืช ื›ื›ื”
Pasted image 20230727110655.png|300

HTTP

ื”ื•ื“ืขื•ืช HTTP ื”ืŸ ื”ืื•ืคืŸ ืฉื‘ื• ื ืชื•ื ื™ื ืžื•ื—ืœืคื™ื ื‘ื™ืŸ ืฉืจืช ืœืœืงื•ื—. ื™ืฉื ื ืฉื ื™ ืกื•ื’ื™ื ืฉืœ ื”ื•ื“ืขื•ืช: ื‘ืงืฉื•ืช ืฉื ืฉืœื—ื• ืขืœ ื™ื“ื™ ื”ืœืงื•ื— ืœื”ืคืขืœืช ืคืขื•ืœื” ื‘ืฉืจืช, ื•ืชื’ื•ื‘ื•ืช, ื”ืชืฉื•ื‘ื” ืžื”ืฉืจืช.

ื”ื•ื“ืขื•ืช HTTP ืžื•ืจื›ื‘ื•ืช ืžืžื™ื“ืข ื˜ืงืกื˜ื•ืืœื™ ื”ืžืงื•ื“ื“ ื‘-ASCII, ื•ืžืชืคืจืฉื•ืช ืขืœ ืคื ื™ ืžืกืคืจ ืฉื•ืจื•ืช. ื‘-HTTP/1.1 ื•ื‘ื’ื™ืจืกืื•ืช ืงื•ื“ืžื•ืช ืฉืœ ื”ืคืจื•ื˜ื•ืงื•ืœ, ื”ื•ื“ืขื•ืช ืืœื• ื ืฉืœื—ื• ื‘ื’ืœื•ื™ ื“ืจืš ื”ื—ื™ื‘ื•ืจ. ื‘-HTTP/2, ื”ื”ื•ื“ืขื” ืฉืคืขื ื”ื™ื™ืชื” ื ื™ืชื ืช ืœืงืจื™ืื” ืื ื•ืฉื™ืช ืžื—ื•ืœืงืช ื›ืขืช ืœืžืกื’ืจื•ืช HTTP, ืžื” ืฉืžืกืคืง ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ื•ืฉื™ืคื•ืจื™ ื‘ื™ืฆื•ืขื™ื.

Pasted image 20230727111651.png|400

ื‘ืงืฉื•ืช ื•ืชืฉื•ื‘ื•ืช ื‘HTTP ื—ื•ืœืงื™ื ืžื‘ื ื” ื“ื•ืžื” ื•ืžื•ืจื›ื‘ื™ื ืž

  1. ืฉื•ืจืช ื”ืชื—ืœื” ืฉืžืชืืจืช ืืช ื”ื‘ืงืฉื” ืื• ืืช ืกื˜ื˜ื•ืก ื”ื‘ืงืฉื”.
  2. ืกื˜ ืื•ืคืฆื™ื•ื ืœื™ ืฉืœ headers ืฉืžืชืืจื™ื ืืช ื”ื‘ืงืฉื” ืื• ื”ืชื’ื•ื‘ื” ื”ื—ื•ื–ืจืช
  3. body ืื•ืคืฆื™ื•ื ืœื™ ืฉืžื›ื™ืœ ืžื™ื“ืข ืฉืžืฉื•ื™ื™ืš ืœื‘ืงืฉื” ืื• ืœืชืฉื•ื‘ื”.

Pasted image 20230727115345.png

HTTP Request

Start line

ื‘ืงืฉื•ืช HTTP ื”ืŸ ื”ื•ื“ืขื•ืช ืฉื ืฉืœื—ื•ืช ืขืœ ื™ื“ื™ ื”ืœืงื•ื— ื›ื“ื™ ืœื™ื–ื•ื ืคืขื•ืœื” ื‘ืฉืจืช. ืงื• ื”ื”ืชื—ืœื” ืฉืœื”ื ืžื›ื™ืœ ืฉืœื•ืฉื” ืืœืžื ื˜ื™ื:
HTTP method
ืžืชืืจ ืื™ื–ื” ืคืขื•ืœื” ื”ื‘ืงืฉื” ืจื•ืฆื” ืœืขืฉื•ืช:
GET- ืžื‘ืงืฉืช ืœืงื‘ืœ ืžืฉืื‘ ืžืกื•ื™ื™ื.
HEAD- ืžื‘ืงืฉืช ืืช ืื•ืชื” ืชื’ื•ื‘ื” ื›ืžื• ื‘ืงืฉืช ื” GET ืจืง ื‘ืœื™ ื” body.
POST- ืฉืœื™ื—ื” ืฉืœ ื™ื™ืฉื•ืช ืขื‘ื•ืจ ืžืฉืื‘ ืžืกื•ื™ื™ื ื‘ืžืขืจื›ืช, ืœืขืชื™ื ื–ืืช ืžืฉื ื” ืืช ื” state ืฉืœื• ืื• ืžืฉืคื™ืขื” ืขืœ ื”ืฉืจืช.
DELETE- ืžื—ื™ืงื” ืฉืœ ืžืฉืื‘ ืžืกื•ื™ื™ื.
PUT-ื”ื—ืœืคื” ืฉืœ ืžืฉืื‘ ืžืกื•ื™ื™ื ื‘ืชื•ื›ืŸ ื”ื‘ืงืฉื”.
PATCH- ื‘ื™ืฆื•ืข ืžื•ื“ื™ืคื™ืงืฆื™ื” ืฉืœ ืžืฉืื‘ ื‘ืฉืจืช.

Request target
ื‘ื“ืจืš ื›ืœืœ ื–ื” URL ืื• ื ืชื™ื‘ ืื‘ืกื•ืœื•ื˜ื™ ืฉืžื›ื™ืœ ื‘ืชื•ื›ื• queries, ืคื•ืจื˜ ื•ื›ื•ืณ.
ื‘ืขืฆื ื–ื” ื™ื›ื•ืœ ืœื”ื™ื•ืช ื›ืœ ื ืชื™ื‘ ืฉื”ื•ื ื‘ืขืฆื ืžื•ืจื›ื‘ ืžื”ืžื‘ื ื” ื”ืžืœื ืฉืœ URL
Pasted image 20230727121230.png

HTTP version
ื”ื’ืจืกื” ืงื•ื‘ืขืช ืืช ื”ืžื‘ื ื” ืฉืœ ืฉืืจ ื”ื”ื•ื“ืขื” ื•ื’ื ื›ื“ื™ ืœื“ืขืช ื›ื™ืฆื“ ืœื‘ื ื•ืช ืืช ื”ืชื’ื•ื‘ื”.

Headers

ื›ื•ืชืจื•ืช HTTP ืžื™ื™ืฆืจื•ืช ื‘ืงืฉื” ืชื—ืช ืื•ืชื• ืžื‘ื ื” ื‘ืกื™ืกื™ ืฉืœ Header HTTP: ืžื—ืจื•ื–ืช ืœื ืชืœื•ื™ืช ืจื™ืฉื™ื•ืช ื•ืื—ืจื™ื” ื ืงื•ื“ืชื™ื™ื (':') ื•ืขืจืš ืฉื”ืžื‘ื ื” ืฉืœื• ืชืœื•ื™ ื‘Header. ื”ื›ื•ืชืจืช ื›ื•ืœื”, ื›ื•ืœืœ ื”ืขืจืš, ืžื•ืจื›ื‘ืช ืžืฉื•ืจื” ืื—ืช ื‘ื•ื“ื“ืช, ืฉื™ื›ื•ืœื” ืœื”ื™ื•ืช ืืจื•ื›ื” ืœืžื“ื™.

ื–ื” ืกื•ื’ ืฉืœ metadata ืขืœ ื”ื‘ืงืฉื”.
Pasted image 20230727120750.png

Body

ื”ื—ืœืง ื”ืื—ืจื•ืŸ ืฉืœ ื”ื‘ืงืฉื” ื”ื•ื ื”ื’ื•ืฃ ืฉืœื”. ืœื ืœื›ืœ ื”ื‘ืงืฉื•ืช ื™ืฉ ืื—ืช: ื‘ืงืฉื•ืช ืฉืžื‘ื™ืื•ืช ืžืฉืื‘ื™ื, ื›ืžื• GET, HEAD, DELETE ืื• OPTIONS, ื‘ื“ืจืš ื›ืœืœ ืื™ื ืŸ ื–ืงื•ืงื•ืช ืœืžืฉืื‘ื™ื ื›ืืœื”. ื—ืœืง ืžื”ื‘ืงืฉื•ืช ืฉื•ืœื—ื•ืช ื ืชื•ื ื™ื ืœืฉืจืช ืขืœ ืžื ืช ืœืขื“ื›ืŸ ืื•ืชื: ื›ืคื™ ืฉืงื•ืจื” ืœืขืชื™ื ืงืจื•ื‘ื•ืช ื‘ื‘ืงืฉื•ืช POST (ื”ืžื›ื™ืœื•ืช ื ืชื•ื ื™ ื˜ื•ืคืก HTML).

HTTP Response

ื›ืคื™ ืฉืืžืจื ื• ื”ืžื‘ื ื” ื”ื•ื ื“ื•ืžื” ืœRequest.

Status line
ืฉื•ืจืช ื”ื”ืชื—ืœื” ืฉืœ ืชื’ื•ื‘ืช HTTP, ื”ื ืงืจืืช ืฉื•ืจืช ื”ืžืฆื‘, ืžื›ื™ืœื” ืืช ื”ืžื™ื“ืข ื”ื‘ื:

  1. ื’ืจืกื” ืฉืœ ื”ืคืจื•ื˜ื•ืงื•ืœ, ื‘ื“ืดื› HTTP/1.1
  2. ืกื˜ื˜ื•ืก ืงื•ื“ ืฉืžืขื™ื“ ืขืœ ื”ืฆืœื—ื” ืื• ื›ืฉืœื•ืŸ. ื™ืฉื ืŸ ืงื•ื ื‘ื ืฆื™ื•ืช ื”ืงืฉื•ืจื•ืช ืœืงื•ื“ื™ื ื”ืืœื” ืœืžืฉืœ 200โˆ’299 ืžื™ื™ืฆื’ ื”ืฆืœื—ื” 400โˆ’499 ืžื™ื™ืฆื’ ืฉื’ื™ืื” ื”ืงืฉื•ืจื” ื‘ืฆื“ client.
    500โˆ’599 ื–ื” ืฉื’ื™ืื” ื‘ืฆื“ ืฉืจืช.

Headers
ืžื‘ื ื” ื–ื”ื” ืœื—ืœื•ื˜ื™ืŸ ืฉืœ headers ื‘ื‘ืงืฉืช http. ื”ื”ื‘ื“ืœ ื”ื™ื—ื™ื“ ื”ื•ื ื‘ืงื•ื ื˜ืงืกื˜ ืฉื™ืฉ ืœheaders ื”ืืœื” ื›ืœื•ืžืจ ืžื” ื”ืžืฉืžืขื•ืช ืฉืœื”ื.

Pasted image 20230727121718.png

Body
ื‘ืื•ืคืŸ ื“ื•ืžื” ืœ HTTP Request. ืžื›ื™ืœื•ืช ืžื™ื“ืข ื”ื—ื•ื–ืจ ืžื‘ืงืฉื”. ื”ืจื‘ื” ืคืขืžื™ื ืื ื—ื ื• ื ืจืื” ืืช ื–ื” ื‘ื‘ืงืฉื•ืช ืžืกื•ื’ GET.

GET vs POST

Pasted image 20230727123001.png
ื”ื”ื‘ื“ืœ ื”ืขื™ืงืจ ื”ื•ื ืฉื”ืžื™ื“ืข ืžื•ืขื‘ืจ ื‘ URL ืขืฆืžื• ื‘ื‘ืงืฉื•ืช GET ื“ืจืš ื” query , ื‘ืขื•ื“ ืฉื‘POST ื”ืžื™ื“ืข ืขื•ื‘ืจ ื‘ body.

HTTP Server

ืฉืจืช HTTP (Hypertext Transfer Protocol) ื”ื•ื ื™ื™ืฉื•ื ืชื•ื›ื ื” ื”ืžืฉืจืช ื“ืคื™ ืื™ื ื˜ืจื ื˜ ืื• ืžืฉืื‘ื™ื ืื—ืจื™ื ืœืœืงื•ื—ื•ืช ืœืคื™ ื‘ืงืฉืชื. ื”ื•ื ืžืงื‘ืœ ื‘ืงืฉื•ืช ืžื“ืคื“ืคื ื™ ืื™ื ื˜ืจื ื˜ ืื• ืœืงื•ื—ื•ืช ืื—ืจื™ื ื•ืžื’ื™ื‘ ืขื ื”ืชื•ื›ืŸ ื”ืžื‘ื•ืงืฉ, ืฉื™ื›ื•ืœ ืœื”ื™ื•ืช ื‘ืฆื•ืจื” ืฉืœ ื“ืคื™ HTML, ืชืžื•ื ื•ืช, ืกืจื˜ื•ื ื™ื, ืงื‘ืฆื™ื ืื• ืžืฉืื‘ื™ื ืื—ืจื™ื. ืฉืจืช ื”-HTTP ืžืื–ื™ืŸ ืœื‘ืงืฉื•ืช ื ื›ื ืกื•ืช ื‘ื™ืฆื™ืื” ืกืคืฆื™ืคื™ืช (ื‘ื“ืจืš ื›ืœืœ ื™ืฆื™ืื” 80 ืขื‘ื•ืจ HTTP ืื• ื™ืฆื™ืื” 443 ืขื‘ื•ืจ HTTPS) ื•ืžืงื‘ืœ ื—ื™ื‘ื•ืจื™ื ืžืœืงื•ื—ื•ืช. ื›ืืฉืจ ืœืงื•ื— ืžื’ื™ืฉ ื‘ืงืฉื” ืœืžืฉืื‘ ืžืกื•ื™ื (ื›ื’ื•ืŸ ื“ืฃ ืื™ื ื˜ืจื ื˜), ื”ืฉืจืช ืžืขื‘ื“ ืืช ื”ื‘ืงืฉื”, ืžืืชืจ ืืช ื”ืžืฉืื‘ ื”ืžื‘ื•ืงืฉ ื•ืฉื•ืœื— ืื•ืชื• ื‘ื—ื–ืจื” ืœืœืงื•ื— ื›ืชื’ื•ื‘ืช HTTP. ืฉืจืชื™ HTTP ื”ื ืžืจื›ื™ื‘ ื‘ืกื™ืกื™ ืฉืœ ื”-World Wide Web ื•ืื—ืจืื™ื ืขืœ ืืกืคืงืช ืชื•ื›ืŸ ืื™ื ื˜ืจื ื˜ ืœืžืฉืชืžืฉื™ื. ื“ื•ื’ืžืื•ืช ืœืชื•ื›ื ื•ืช ืฉืจืช HTTP ืคื•ืคื•ืœืจื™ื•ืช ื›ื•ืœืœื•ืช Apache HTTP Server, Microsoft IIS (Internet Information Services) ื•-Node.js. ืขืœ ื—ืœืงื ื ื“ื‘ืจ ื‘ื”ืžืฉืš.

ืฉืจืช ืฉื›ื–ื” ื”ื•ื ืžืงืจื” ืคืจื˜ื™ ืฉืœ Web Server.
ืฉืจืช ืื™ื ื˜ืจื ื˜ ื”ื•ื ื™ื™ืฉื•ื ืชื•ื›ื ื” ืื• ืชื•ื›ื ื™ืช ื”ืžืฉืžืฉืช ื›ืขืžื•ื“ ื”ืฉื“ืจื” ืฉืœ ื”-World Wide Web ื•ืžืืคืฉืจืช ืœืœืงื•ื—ื•ืช (ื›ื’ื•ืŸ ื“ืคื“ืคื ื™ ืื™ื ื˜ืจื ื˜) ืœื’ืฉืช ื•ืœืื—ื–ืจ ืชื•ื›ืŸ ืื™ื ื˜ืจื ื˜ ื“ืจืš ื”ืื™ื ื˜ืจื ื˜. ื”ื•ื ืžื˜ืคืœ ื‘ื‘ืงืฉื•ืช HTTP ืžืœืงื•ื—ื•ืช ื•ืžื’ื™ื‘ ืขื ื“ืคื™ ื”ืื™ื ื˜ืจื ื˜, ื”ืงื‘ืฆื™ื ืื• ื”ื ืชื•ื ื™ื ื”ืžื‘ื•ืงืฉื™ื.

ื ืฉื™ื ืœื‘

ื ื™ืชืŸ ืœืžืžืฉ ื‘ืขืฆืžื ื• ืฉืจืช HTTP ื‘ืคื™ื™ืชื•ืŸ, ื›ืœ ืฉืฆืจื™ืš ืœืขืฉื•ืช ื”ื•ื ืœื”ืื–ื™ืŸ ืœืคื•ืจื˜ 80 ื‘ืคืจื•ื˜ื•ืงื•ืœ TCP ื•ืœืคืจืกืจ ืืช ื”ื‘ืงืฉื•ืช ื”ื‘ืื•ืช, ื”ื‘ืขื™ื” ื‘ืžื•ื“ืœ ื”ื–ื” ื”ื•ื ืฉื”ื•ื ืคืฉื•ื˜ ืžื“ื™ ื•ื™ื›ื•ืœ ืœืงื‘ืœ ื‘ืงืฉื” ืื—ืช ื›ืœ ืคืขื. ืื– ื’ื ื”ืชืขืกืงื ื• ื‘overhead ืฉืœ ืคืจืกื•ืจ ื‘ืงืฉื” ื•ื’ื ืœื ื‘ื ื™ื ื• ืžืฉื”ื• ืžื•ืจื›ื‘ ืžื“ื™.

Standalone Http Server

ืฉืจืช HTTP ืขืฆืžืื™ ื”ื•ื ืชื•ื›ื ืช ืฉืจืช ืื™ื ื˜ืจื ื˜ ื”ืคื•ืขืœืช ื‘ืื•ืคืŸ ืขืฆืžืื™ ื•ื™ื›ื•ืœื” ืœืฉืจืช ื‘ืงืฉื•ืช HTTP ืžื‘ืœื™ ืœื”ืกืชืžืš ืื• ืœื”ื™ื•ืช ืžืฉื•ืœื‘ืช ืขื ืจื›ื™ื‘ื™ื ืื• ื™ื™ืฉื•ืžื™ื ืื—ืจื™ื ืฉืœ ืฉืจืช ื”ืื™ื ื˜ืจื ื˜. ื–ื” ื ืงืจื "ืขืฆืžืื™" ืžื›ื™ื•ื•ืŸ ืฉื”ื•ื ืื™ื ื• ื“ื•ืจืฉ ืชื•ื›ื ื” ืื• ืžื•ื“ื•ืœื™ื ื ื•ืกืคื™ื ื›ื“ื™ ืœืชืคืงื“ ื•ื™ื›ื•ืœ ืœื˜ืคืœ ื‘ื‘ืงืฉื•ืช HTTP ื‘ืขืฆืžื•.

ื‘ืคื™ื™ืชื•ืŸ ืืคืฉืจ ืœื”ืจื™ื ื‘ืงืœื•ืช ืฉืจืช http ืขืฆืžืื™

# File: simple_http_server.py
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("Serving at port", PORT)
    httpd.serve_forever()

ื–ื” ืฉืจืช ื‘ืกื™ืกื™ ืฉืžื˜ืคืœ ื‘ื‘ืงืฉื•ืช get ื•ืžื‘ื™ื ืงื‘ืฆื™ื ืžื”current directory.

Apache Tomcat

ื˜ื›ื ื•ืœื•ื’ื™ื™ืช open-source web server ืฉืžืฉืžืฉืช ื› container ืขื‘ื•ืจ servlet.
ืžืชื™ื™ื—ืกื™ื ืืœื™ื” ื› standalone HTTP server
ืœืคืขืžื™ื ื›ื™ ื”ื™ื ืžื’ื™ืขื” ืขื HTTP connector ืฉื™ื›ื•ืœ ืœื˜ืคืœ ื‘ื‘ืงืฉื•ืช HTTP ื‘ืœื™ ืฆื•ืจืš ื‘ืฉื™ืจื•ืชื™ื ื—ื™ืฆื•ื ื™ื™ื.

Servlet
servlet ื”ื•ื ืจื›ื™ื‘ ืžื‘ื•ืกืก Java ื”ืžืฉืžืฉ ืœื”ืจื—ื‘ืช ื”ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ืฉืœ ืฉืจืช ืื™ื ื˜ืจื ื˜ ื•ื™ืฆื™ืจืช ืชื•ื›ืŸ ื“ื™ื ืžื™ ืขื‘ื•ืจ ื™ื™ืฉื•ืžื™ ืื™ื ื˜ืจื ื˜. ื–ื•ื”ื™ ื˜ื›ื ื•ืœื•ื’ื™ื” ื‘ืฆื“ ื”ืฉืจืช ืฉืžืขื‘ื“ืช ื‘ืงืฉื•ืช HTTP ื•ืžื™ื™ืฆืจืช ืชื’ื•ื‘ื•ืช ืฉื ื™ืชืŸ ืœืฉืœื•ื— ื‘ื—ื–ืจื” ืœืœืงื•ื—ื•ืช, ื‘ื“ืจืš ื›ืœืœ ืœื“ืคื“ืคื ื™ ืื™ื ื˜ืจื ื˜. Servlets ื”ื ื—ืœืง ื—ื™ื•ื ื™ ืžืคืœื˜ืคื•ืจืžืช Java, Enterprise Edition (Java EE) ืœื‘ื ื™ื™ืช ื™ื™ืฉื•ืžื™ ืื™ื ื˜ืจื ื˜.

ืื ื›ืŸ ืื– ื” flow ืฉืœ standalone server ื‘ืืจื›ื™ื˜ืงื˜ื•ืจื” ืฉืจืื™ื ื• ื”ื™ื ืฉ

  1. ื”ืฉืจืช HTTP ืฉืœ Apache Tomcat ืžืงื‘ืœ ื‘ืงืฉื•ืช HTTP ื•ื™ื•ื“ืข ืœื”ืคืขื™ืœ ืืช ื”ืคื•ื ืงืฆื™ื•ืช ื”ืจืœื•ื•ื ื˜ื™ื•ืช ืœ ServletCat ื‘ื”ืชืื ืœืกื•ื’ ื”ื‘ืงืฉื” ื•ื’ื ืœื”ืขื‘ื™ืจ ืืช ื”ืžื™ื“ืข ื”ื“ืจื•ืฉ.
  2. Servlet ื™ื•ื“ืขืช ื‘ื”ืชืื ืœื‘ืงืฉื” ืœื”ื—ื–ื™ืจ ืืช ื”ืชื•ื›ืŸ ื”ื“ืจื•ืฉ ืœืœืงื•ื—, ื–ื” ื™ื›ื•ืœ ืœื”ื™ื•ืช ื“ืคื™ HTML ืกื˜ื˜ื™ื™ื, ื–ื” ื™ื›ื•ืœ JSON ื•ืขื•ื“.

Pasted image 20230727131919.png

ืื ื—ื ื• ื›ืžืชื›ื ืชื™ื ืจืง ืฆืจื™ื›ื™ื ืœื”ื—ืœื™ื˜ ืžื” ืœืขืฉื•ืช ื›ืืฉืจ ืžื•ืคืขืœื•ืช ื”ืคื•ื ืงืฆื™ื•ืช ื”ืืœื”. ื›ืœื•ืžืจ ื›ืœ ืฉืื ื—ื ื• ืฆืจื™ื›ื™ื ืœืขืฉื•ืช ื”ื•ื ืœืžืžืฉ ืืช ื”ื˜ื™ืคื•ืœ ื‘ื‘ืงืฉื•ืช ื”ืฉื•ื ื•ืช ื”ืžืชืงื‘ืœื•ืช, ื›ืœื•ืžืจ ืœื”ื—ืœื™ื˜ ืžื” ื”ืฉืจืช ืฉืœื ื• ืžื—ื–ื™ืจ.

public abstract class HttpServlet extends GenericServlet {
	// ...
 protected void doGet(HttpServletRequest req, HttpServletResponse resp);
 
 protected void doPost(HttpServletRequest req, HttpServletResponse resp);
 //...
}

php

ืืคืฉืจ ืœืขืฉื•ืช ืืช ืื•ืชื• ื“ื‘ืจ ืขื ื˜ื›ื ื•ืœื•ื’ื™ื” ืื—ืจืช โ€“ php.
php ื”ื™ื ืฉืคืช ืกืงืจื™ืคื˜ ืฉืชืจื•ืฅ ื‘ืฆื“ ืฉืจืช ื•ืฉื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ื” ื›ื“ื™ ืœืงื‘ื•ืข ืžื” ื™ื”ื™ื” ื”ืชื•ื›ืŸ ืฉื—ื•ื–ืจ ืžื‘ืงืฉืช ืื™ื ื˜ืจื ื˜.
ื”ืฉืจืช HTTP ื™ื•ื›ืœ ื‘ืžืงื•ื ืœื”ืฉืชืžืฉ ื‘ Servlet.
ืœื”ื—ื–ื™ืจ php interpreter ื•ื‘ื”ืชืื ืœื‘ืงืฉื•ืช ื”ืžื’ื™ืขื•ืช ืœื”ืจื™ืฅ ืืช ื”ืกืงื™ืคื˜ php ื”ืžืชืื™ื.
ื ืฉื™ื ืœื‘ ืฉื”ื™ื ืžืชื•ื›ื ื ืช ื›ื“ื™ ืœื”ื—ื–ื™ืจ HTML.

Embedded server

ืฉืจืช ืžืฉื•ื‘ืฅ, ื”ื™ื“ื•ืข ื’ื ื›ืฉืจืช ืื™ื ื˜ืจื ื˜ ืžืฉื•ื‘ืฅ, ื”ื•ื ืกื•ื’ ืฉืœ ืฉืจืช ื”ืžืฉื•ืœื‘ ื™ืฉื™ืจื•ืช ื‘ืืคืœื™ืงืฆื™ื” ืื• ื‘ืชื•ื›ื ื” ื‘ืžืงื•ื ืœื”ื™ื•ืช ืžื•ืคืขืœ ื›ื™ื™ืฉื•ื ืฉืจืช ืขืฆืžืื™. ื–ื” ืžืืคืฉืจ ืœืžืคืชื—ื™ื ืœื›ืœื•ืœ ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ืฉืจืช ื‘ืชื•ืš ื”ืืคืœื™ืงืฆื™ื•ืช ืฉืœื”ื, ืžื” ืฉืžืืคืฉืจ ืœื”ื ืœื”ื’ื™ืฉ ืชื•ื›ืŸ ืื™ื ื˜ืจื ื˜ ื•ืœื”ื’ื™ื‘ ืœื‘ืงืฉื•ืช HTTP ืœืœื ืฆื•ืจืš ื‘ื”ืชืงื ืช ืฉืจืช ืื™ื ื˜ืจื ื˜ ื—ื™ืฆื•ื ื™.

ื ืชื‘ื•ื ืŸ ื‘ืชืจืฉื™ื ื”ืžื“ื’ื™ื ืืจื›ื™ื˜ืงื˜ื•ืจืช ืฉืจืช ืฉื”ื•ื embedded

Pasted image 20230727141029.png|400

ื‘ื ื™ื’ื•ื“ ืœืืจื›ื™ื˜ืจื˜ื•ืงื” standalone ืฉื‘ื” ื”ืฉืจืช ืจืง ืžื˜ืคืœ ื‘ื‘ืงืฉื•ืช ื•ืžื—ื–ื™ืจ ืชืฉื•ื‘ื”. ื›ืืŸ:

  1. ื™ื”ื™ื” ืœื ื• ืงื•ื“ ืฉืจืช ืฉื™ื•ื“ืข ืœืงื‘ืœ ื‘ืงืฉื•ืช HTTP.
  2. ื™ื”ื™ื” ืœื ื• ื—ืœืง ื‘ืงื•ื“ ืฉื™ื•ื“ืข ืœืขื‘ื“ ืืช ื”ื‘ืงืฉื” (ื ืชืžืงื“ ื‘ื—ืœืง ื”ื–ื” ืฉื–ื” ื‘ื™ื“ื™ื•ืง ืžื” ืฉ NodeJS ื‘ื™ื—ื“ ืขื express ื™ืชื ื• ืœื ื•)
  3. ื‘ื”ืชืื ืœื‘ืงืฉื” ื ื•ื›ืœ ืœืคื ื•ืช ืœืจื›ื™ื‘ื™ื ืื—ืจื™ื ื‘ืฉืจืช ืœื‘ืฆืข ืœื•ื’ื™ืงื•ืช ื›ืืœื” ื•ืื—ืจื•ืช ื•ื‘ื”ืชืื ืœืฆื•ืจืš ืœืจื ื“ืจ UI.
  4. ืจืง ืœืื—ืจ ื‘ื™ืฆื•ืข ื›ืœ ื”ื“ื‘ืจื™ื ื”ืœืœื• ื ืฉืœื— ืืช ื”ืœื•ื’ื™ืงื” ื‘ื—ื–ืจื” ืœืœืงื•ื—.

NodeJS

Node.js ื”ื™ื ืกื‘ื™ื‘ืช runtime ืœ javascript ืฉืžื‘ื•ืกืกืช ืขืœ ืžื ื•ืข V8.

ืืคืœื™ืงืฆื™ื™ืช Node.js ืคื•ืขืœืช ื‘ืชื”ืœื™ืš ื‘ื•ื“ื“, ืžื‘ืœื™ ืœื™ืฆื•ืจ thread ื—ื“ืฉ ืœื›ืœ ื‘ืงืฉื”. Node.js ืžืกืคืง ืงื‘ื•ืฆื” ืฉืœ ืคืจื™ืžื™ื˜ื™ื‘ื™ื ืืกื™ื ื›ืจื•ื ื™ื™ื ืฉืœ ืงืœื˜/ืคืœื˜ ื‘ืกืคืจื™ื™ื” ื”ืกื˜ื ื“ืจื˜ื™ืช ืฉืœื• ืฉืžื•ื ืขื™ื ืžืงื•ื“ JavaScript ืœื—ืกื•ื ื•ื‘ืื•ืคืŸ ื›ืœืœื™, ืกืคืจื™ื•ืช ื‘-Node.js ื ื›ืชื‘ื•ืช ื‘ืืžืฆืขื•ืช ืคืจื“ื™ื’ืžื•ืช ืœื ื—ื•ืกืžื•ืช, ืžื” ืฉื”ื•ืคืš ืืช ื”ืชื ื”ื’ื•ืช ื”ื—ืกื™ืžื” ืœื—ืจื™ื’ ื•ืœื ืœื ื•ืจืžื”.

ื›ืืฉืจ Node.js ืžื‘ืฆืข ืคืขื•ืœืช I/O, ื›ืžื• ืงืจื™ืื” ืžื”ืจืฉืช, ื’ื™ืฉื” ืœืžืกื“ ื ืชื•ื ื™ื ืื• ืœืžืขืจื›ืช ื”ืงื‘ืฆื™ื, ื‘ืžืงื•ื ืœื—ืกื•ื ืืช ื”thread ื•ืœื‘ื–ื‘ื– ืžื—ื–ื•ืจื™ CPU ื‘ื”ืžืชื ื”, Node.js ื™ื—ื“ืฉ ืืช ื”ืคืขื•ืœื•ืช ื›ืืฉืจ ื”ืชื’ื•ื‘ื” ืชื—ื–ื•ืจ.
ื”ืขื•ื‘ื“ื” ื”ื–ืืช ืžืืคืฉืจืช ืœ Nodejs ืœื ื”ืœ ืืœืคื™ ื—ื™ื‘ื•ืจื™ื ื‘ืฉืจืช ื™ื—ื™ื“ ื‘ืœื™ ืฆื•ืจืš ื›ืœืœ ื‘ื ื™ื”ื•ืœ threads.

ื”ื™ืชืจื•ืŸ ื”ื›ื™ ื’ื“ื•ืœ ืฉืœื” ื”ื™ื ืฉื”ื™ื ื›ืชื•ื‘ื” ื‘ javascript ื•ืœื›ืŸ ืžืคืชื—ื™ื ืฉื‘ืขื‘ืจ ื”ืชืขืกืงื• ืจืง ื‘ front ื™ื›ื•ืœื™ื ื›ืขืช ืœืขื‘ื•ื“ ื’ื ืขื ื˜ื›ื ื•ืœื•ื’ื™ื•ืช back.

const http = require('http');

const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World\n');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

ื™ืฆืจื ื• ื›ืืŸ ืฉืจืช ืคืฉื•ื˜ ืฉื›ืืฉืจ ื ื•ืฆืจ ื”ืฉืจืช ื”ื•ื ืคืฉื•ื˜ ืžื—ื–ื™ืจ status code:200 ื•ืืช ื”ืžื—ืจื•ื–ืช Hello World.

ื”ืจืขื™ื•ืŸ ื”ื›ืœืœื™ ื”ื•ื ืฉื ื•ื›ืœ ืœื”ืจื™ื ืฉืจืช HTTP ืฉื‘ืขืช ืงื‘ืœืช ื‘ืงืฉื” ื”ื•ื ื”ืžื™ื“ืข ืžืขื•ื‘ื“ ืขืœ ื™ื“ื™ ื”Server code ื•ืžื•ื–ืจืง ื‘ืฉืชื™ ื”ืคืจืžื˜ืจื™ื request,response ืœืื—ืจ ืžื›ืŸ, ื ื™ืชืŸ ืœื‘ื“ื•ืง ืืช ืื•ืคื™ ื”ื‘ืงืฉื™ ืœืคื™ ื”ืžื™ื“ืข ื”ื ืžืฆื ื‘ืคืจืžื˜ืจื™ื ื”ืืœื• ื•ืœื‘ืฆืข ื”ืชื ื”ื’ื•ืช ื‘ื”ืชืื.

const http = require("http")

function handleRequest(request,response) {
	if (request.url == '/foo') {
 response.write('<html><body><b>foo</b></body></html>')
 }
 else if(request.url == '/bar') {
  response.write('<html><body><u>bar</u></body> </html>')
 }
 else 
	 response.statusCode = 404
response.end()
}

 const server = http.createServer(handleRequest)
 server.listen(80)

ื›ืืŸ ื›ื‘ืจ ืจืื™ื ื• ื“ื•ื’ืžื” ื™ื•ืชืจ ืžืขื ื™ื™ื ืช ืฉื‘ื•ื“ืงืช ืืช ื”url. ื‘ืื•ืชื” ืžื™ื“ื” ื™ื›ืœื ื• ืœื›ืชื•ื‘ json, ื•ื™ื›ืœื ื• ื’ื ืœื‘ืฆืข ื‘ื“ื™ืงื•ืช ืขืœ ืžื™ื“ืข ืื—ืจ ืžื”ื‘ืงืฉื”.

Express

ื–ื” framework ืฉื›ืชื•ื‘ ื‘-JavaScript ื•ืžืชืืจื— ื‘ืกื‘ื™ื‘ืช ื–ืžืŸ ื”ืจื™ืฆื” ืฉืœ Node.js.
ื”ื•ื ืžื™ื™ืฆืจ ืžืžืฉืง ืฉื™ื•ืชืจ ื ื•ื— ืœืขื‘ื•ื“ื” , ื‘ืงื•ื“ nodejs ืžืงื•ื“ื, ืขืœื™ื ื• ื”ื™ื” ืœืคืจืกืจ ืืช ื”url ื•ืœืจืื•ืช ืžื™ ืฉืœื— ืืช ื”ื‘ืงืฉื” ื›ื“ื™ ืœื“ืขืช ืžื” ืœื”ื—ื–ื™ืจ

const express = require('express')
const app = express()
const port = 12345

app.get('/', (req, res) => {
	res.send('<html><body><h1>Hello World!</h1></body></html>')
})

ื ื™ืชืŸ ืœืจืื•ืช ื›ืืŸ ืฉื‘ื ื™ื’ื•ื“ ืœืงื•ื“ NodeJS ื˜ื”ื•ืจ ื™ืฉ ืœื ื• API ื™ื•ืชืจ ืกื•ื›ืจื™ ืžื‘ื—ื™ื ืชื™ ื”ืกื™ื ืชืงืก. ื‘ืžืงื•ื ืฉื ืฆื˜ืจืš ืœืคืจืกืจ ืืช ื” (request,respone) ื•ืœื”ื‘ื™ืŸ ืžื”ื™ ื”ื‘ืงืฉื” ื•ื‘ื”ืชืื ืœื›ืš ืœื‘ืฆืข ืงื•ื“, ื ื•ื›ืœ ืœื”ืฆืžื™ื“ handler ืœendPoint ืกืคืฆื™ืคื™ (ืœื“ื•ื’ืžื” ื™ื›ื•ืœื ื• ืœื‘ื ื•ืช ื’ื handler ืขื‘ื•ืจ ื”ืกื™ื•ืžืช /bar ) ืžื” ืฉื™ื™ืฆื•ืจ ืงื•ื“ ื™ื•ืชืจ ื ื•ื— ื•ื™ืืคืฉืจ ืฉื™ืžื•ืฉ ื‘ืชื‘ื ื™ื•ืช ืขื™ืฆื•ื‘ ืžื•ืจื›ื‘ื•ืช ื™ื•ืชืจ ืฉื ื“ื‘ืจ ืขืœื™ื”ื ื›ืžื• MVC ืฉื ื“ื‘ืจ ืขืœื™ื• ื‘ื”ืžืฉืš.

ืชืงืฉื•ืจืช ืกื™ื ื›ืจื•ื ื™ืช ื•ืชืงืฉื•ืจืช ืืกื™ื ื›ืจื•ื ื™ืช

ืชืงืฉื•ืจืช ืกื™ื ื›ืจื•ื ื™ืช ื•ื-ืกื™ื ื›ืจื•ื ื™ืช ื”ืŸ ืฉืชื™ ื’ื™ืฉื•ืช ืฉื•ื ื•ืช ืœืื•ืคืŸ ืฉื‘ื• ื ืชื•ื ื™ื ืื• ื”ื•ื“ืขื•ืช ืžื•ื—ืœืคื™ื ื•ืžืขื•ื‘ื“ื™ื ื‘ื™ืŸ ืฉื ื™ ืฆื“ื“ื™ื ืื• ื™ื•ืชืจ ื‘ืžืขืจื›ืช. ืœื’ื™ืฉื•ืช ืืœื• ืžืืคื™ื™ื ื™ื ื‘ืจื•ืจื™ื ื•ื”ืŸ ืžืฉืžืฉื•ืช ื‘ื”ืงืฉืจื™ื ืฉื•ื ื™ื ื‘ื”ืชืื ืœืื•ืคื™ ื”ืžืฉื™ืžื•ืช ื•ืœื”ืชื ื”ื’ื•ืช ื”ืžืขืจื›ืช ื”ืจืฆื•ื™ื”.

ืกื™ื ื›ืจื•ื ื™

ื”ื“ืคื“ืคืŸ ืงื™ื‘ืœ ืชืฉื•ื‘ื” ืžื”ืฉืจืช (ืืช ื›ืœ ืขืžื•ื“ ื”html, ืœืžืจื•ืช ืฉืœื ืฆืจื™ืš ืืช ื›ื•ืœื•) ื›ืชื•ืฆืื” ืžื›ืš ื”ื“ืคื“ืคืŸ ืžืจืคืจืฉ ืืช ื”ืขืžื•ื“ ื‘ืฉื‘ื™ืœ ืœื˜ืขื•ืŸ ืืช ื”ืžื™ื“ืข.

Pasted image 20230727164647.png

ืืกื™ื ื›ืจื•ื ื™

ื”ื“ืคื“ืคืŸ ืžืงื‘ืœ ืชืฉื•ื‘ื” ืžื”ืฉืจืช (ืจืง ืืช ื”ืžื™ื“ืข ื”ื ืฆืจืš) ื›ืชื•ืฆืื” ืžื›ืš ื”ื“ืคื“ืคืŸ ื˜ื•ืขืŸ ืืช ื”ืžื™ื“ืข ืœืขืžื•ื“ ื‘ืœื™ ืœืขืฉื•ืช ืจื™ืคืจืฉ.
ื ื™ืชืŸ ืœืขืฉื•ืช ื–ืืช ืขืœ ื™ื“ื™ ื”ืขื‘ืจื” ืฉืœ JSON ืฉืžื™ื™ืฆื’ ืืช ื”ืžื™ื“ืข ืฉื”ืงื•ืžืคื•ื ื ื˜ื•ืช ื‘React ื™ืฉืชืžืฉื• ื‘ื”ืŸ ื›ื“ื™ ืœืขื“ื›ืŸ ืืช ื”ืžื™ื“ืข.
Pasted image 20230727172744.png

Web Service

Web Service ื”ื•ื ื˜ื›ื ื•ืœื•ื’ื™ื” ื”ืžืืคืฉืจืช ืœื™ื™ืฉื•ืžื™ ืชื•ื›ื ื” ืฉื•ื ื™ื ืœืชืงืฉืจ ื•ืœื”ื—ืœื™ืฃ ื ืชื•ื ื™ื ื“ืจืš ื”ืื™ื ื˜ืจื ื˜. ื”ื•ื ืžืกืคืง ื“ืจืš ืกื˜ื ื“ืจื˜ื™ืช ืœื™ื™ืฉื•ืžื™ื ืœื™ืฆื•ืจ ืื™ื ื˜ืจืืงืฆื™ื” ื–ื” ืขื ื–ื”, ืœืœื ืงืฉืจ ืœืฉืคื•ืช ื”ืชื›ื ื•ืช, ื”ืคืœื˜ืคื•ืจืžื•ืช ืื• ื”ืžื›ืฉื™ืจื™ื ืขืœื™ื”ื ื”ื ืคื•ืขืœื™ื.

Web Server ื• Web Services ื”ื ืฉืชื™ ืจื›ื™ื‘ื™ื ืฉื™ื›ื•ืœื™ื ืœื”ื–ื™ืŸ ืืช ื” client ืฉืœื ื• ื‘ืžื™ื“ืข ื•ื‘ืžืžืฉืง ืžืฉืชืžืฉ ืฉืžืชืขื“ื›ืŸ ื‘ืฆื•ืจื” ื“ื™ื ืžื™ืช. ื‘ืขื•ื“ ืฉ Web Server ื”ื•ื ืœืจื•ื‘ ืžื•ื’ื“ืจ ื‘ืืžืฆืขื•ืช ืคืจื•ื˜ื•ืงื•ืœ HTTP, ืฉื™ืจื•ืชื™ ืจืฉืช ืฆืจื™ื›ื™ื ืœื”ื’ื“ื™ืจ API ืื• ื—ื•ื–ื” ื›ืœืฉื”ื• ื›ื“ื™ ืœืืคืฉืจ ืืช ืชืงืฉื•ืจืช ื”ืžื™ื“ืข ื‘ื™ื ื”ื.

Pasted image 20230727174128.png

RPC

Remote Procedure Call Web Service
ื”ื™ื ื˜ื›ื ื•ืœื•ื’ื™ื” ืœืชืงืฉื•ืจืช ื‘ื™ืŸ ื™ื™ืฉื•ืžื™ื ื”ืžืืคืฉืจืช ืœืชื•ื›ื ื™ืช ืžื—ืฉื‘ ืื—ืช ืœื”ืคืขื™ืœ ืคื•ื ืงืฆื™ื™ื” ื‘ืชื•ื›ื ื™ืช ืžื—ืฉื‘ ืื—ืจืช ื‘ืื•ืคืŸ ืฉืงื•ืฃ, ื›ืœื•ืžืจ ืœืœื ืฆื•ืจืš ื‘ื™ื™ืฉื•ื ืคืจื˜ื ื™ ืฉืœ ืคืจื•ื˜ื•ืงื•ืœ ื”ืชืงืฉื•ืจืช.

Pasted image 20230727174402.png

ื‘ืืžืฆืขื•ืช RPC ื ื™ืชืŸ ืœืžืžืฉ ืชืงืฉื•ืจืช ืฉืจืช ืœืงื•ื—, ื›ืš ืฉื”ืœืงื•ื— ืžืคืขื™ืœ ืขืœ ื”ืฉืจืช ืืช ื”ืคื•ื ืงืฆื™ื” ื”ืจืฆื•ื™ื” ืชื•ืš ื”ืขื‘ืจืช ื”ืคืจืžื˜ืจื™ื ื”ื ื“ืจืฉื™ื ื•ืžืžืชื™ืŸ ืžืžื ื• ืœืงื‘ืœืช ื”ืชืฉื•ื‘ื”, ืฉื‘ืžืจื‘ื™ืช ื”ืคืขืžื™ื ืขื“ ืœืงื‘ืœืชื” ื”ืœืงื•ื— ืœื ื™ื›ื•ืœ ืœื”ืžืฉื™ืš ื‘ืคืขื•ืœืชื•.

ื”ืจืขื™ื•ืŸ ื”ื•ื ืฉื ื•ื›ืœ ืœื”ืคืขื™ืœ ืคืจื•ืฆื“ื•ืจื•ืช ื‘ืชื•ื›ื ื™ืช ืžื—ืฉื‘ ืื—ืจืช ืœืœื ื”ืฉื™ืงื•ืœ ื‘ืื™ื–ื” ืฉืคื” ื”ื™ื ืจืฆื”.
ืื‘ืœ ื–ื” ื“ื•ืจืฉ ืžืžื™ ืฉืžืžืฉ ืืช ื”ืคืจื•ื˜ื•ืงื•ืœ ืœื™ืฆื•ืจ stubs ืฉื“ืจื›ื ืืคืฉืจ ืœื”ื’ื™ืข ืœืžื™ืžื•ืฉ ื”ืจืœื•ื•ื ื˜ื™ ื‘ืชื•ื›ื ื™ืช ื”ืžืงื‘ื™ืœื”.

ืื—ื“ ื”ืžื™ืžื•ืฉื™ื ื”ืžื•ื›ืจื™ื ื”ื•ื gRPC ืฉืžื’ื“ื™ืจ protocol buffers ื•ื”stubs ืžื™ื•ืฆืจื™ื ืขืœ ื™ื“ื™ ื”ืžืคืชื—ื™ื ืฉืœื”ื ื‘ื”ืชืื ืœืžื” ืฉื›ืชื•ื‘ ื‘protocol buffers.

WSDL

WSDL ื–ื” ืฉืคื” ืžื‘ื•ืกืกืช XML ื”ืžืฉืžืฉืช ืœืชื™ืื•ืจ ื”ืžืžืฉืง ื•ื”ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ืฉืœ ืฉื™ืจื•ืช ืื™ื ื˜ืจื ื˜. WSDL ืžืกืคืงืช ื“ืจืš ืกื˜ื ื“ืจื˜ื™ืช ืœื”ื’ื“ื™ืจ ืืช ื”ืคืขื•ืœื•ืช, ืคืจืžื˜ืจื™ ืงืœื˜ ื•ืคืœื˜, ืกื•ื’ื™ ื ืชื•ื ื™ื ื•ืคืจื•ื˜ื•ืงื•ืœื™ ืชืงืฉื•ืจืช ื”ืžืฉืžืฉื™ื ืฉื™ืจื•ืช ืื™ื ื˜ืจื ื˜, ื•ืžืืคืฉืจืช ืœืœืงื•ื—ื•ืช ืœื”ื‘ื™ืŸ ื›ื™ืฆื“ ืœืงื™ื™ื ืื™ื ื˜ืจืืงืฆื™ื” ืขื ื”ืฉื™ืจื•ืช.

ืžืจื›ื™ื‘ื™ ื”ืžืคืชื— ืฉืœ ืžืกืžืš WSDL ื›ื•ืœืœื™ื:

type: ื”ืกืขื™ืฃ "ืกื•ื’ื™ื" ืžื’ื“ื™ืจ ืืช ืกื•ื’ื™ ื”ื ืชื•ื ื™ื ื”ืžืฉืžืฉื™ื ืืช ืฉื™ืจื•ืช ื”ืื™ื ื˜ืจื ื˜, ื‘ื“ืจืš ื›ืœืœ ื‘ืืžืฆืขื•ืช XML Schema Definition (XSD) ื›ื“ื™ ืœืฆื™ื™ืŸ ืืช ื”ืžื‘ื ื” ื•ื”ืื™ืœื•ืฆื™ื ืฉืœ ืคืจืžื˜ืจื™ ื”ืงืœื˜ ื•ื”ืคืœื˜.

message: ื”ืกืขื™ืฃ "ื”ื•ื“ืขื”" ืžื’ื“ื™ืจ ืืช ืกื•ื’ื™ ื”ื ืชื•ื ื™ื ื”ืžื•ืคืฉื˜ื™ื ืขื‘ื•ืจ ื”ื•ื“ืขื•ืช ืงืœื˜ ื•ืคืœื˜ ืฉื”ื•ื—ืœืคื• ื‘ื™ืŸ ื”ืœืงื•ื— ืœืฉื™ืจื•ืช ื”ืื™ื ื˜ืจื ื˜. ื”ื•ื ืžืชืืจ ืืช ืžื‘ื ื” ื”ื ืชื•ื ื™ื ื”ืžื•ืขื‘ืจื™ื.

PortType: ื”ืกืขื™ืฃ "PortType" ืžื’ื“ื™ืจ ืืช ื”ืžืžืฉืง ื”ืžื•ืคืฉื˜ ืฉืœ ืฉื™ืจื•ืช ื”ืื™ื ื˜ืจื ื˜, ื•ืžืคืจื˜ ืืช ื”ืคืขื•ืœื•ืช ื‘ื”ืŸ ืฉื™ืจื•ืช ื”ืื™ื ื˜ืจื ื˜ ืชื•ืžืš ื•ืืช ื”ื•ื“ืขื•ืช ื”ืงืœื˜ ื•ื”ืคืœื˜ ืขื‘ื•ืจ ื›ืœ ืคืขื•ืœื”.

Binding: ื”ืกืขื™ืฃ "binding" ืžืคืจื˜ ืืช ื”ืคืจื˜ื™ื ื”ืงื•ื ืงืจื˜ื™ื™ื ืฉืœ ื”ืื•ืคืŸ ืฉื‘ื• ืคืขื•ืœื•ืช ืฉื™ืจื•ืช ื”ืื™ื ื˜ืจื ื˜ ืงืฉื•ืจื•ืช ืœืคืจื•ื˜ื•ืงื•ืœ ืชืงืฉื•ืจืช ืื• ืคื•ืจืžื˜ ื”ื•ื“ืขื” ืกืคืฆื™ืคื™ื™ื. ื”ื•ื ืžื’ื“ื™ืจ ืืช ืคื•ืจืžื˜ ื”ื”ื•ื“ืขื•ืช ื•ืืช ืื•ืคืŸ ื”ื—ืœืคืช ื”ื”ื•ื“ืขื•ืช.

Service: ื”ืงื˜ืข "service" ืžืกืคืง ืืช ื”ืžื™ื“ืข ืขืœ ื ืงื•ื“ื•ืช ื”ืงืฆื” ืฉื‘ื”ืŸ ื ื™ืชืŸ ืœื’ืฉืช ืœืฉื™ืจื•ืช ื”ืื™ื ื˜ืจื ื˜. ื”ื•ื ืžืชืืจ ืืช ืžื™ืงื•ื ื”ืจืฉืช (URL) ืฉืœ ืฉื™ืจื•ืช ื”ืื™ื ื˜ืจื ื˜ ื•ืืช ื”ืคืจื•ื˜ื•ืงื•ืœ ื”ืžืฉืžืฉ ืœืชืงืฉื•ืจืช ืื™ืชื•.

<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"
             xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
             targetNamespace="http://example.com/calculator"
             xmlns:tns="http://example.com/calculator">

    <!-- Types: Define the data types used by the web service -->
    <types>
        <schema targetNamespace="http://example.com/calculator"
                xmlns="http://www.w3.org/2001/XMLSchema">
            <element name="AddRequest">
                <complexType>
                    <sequence>
                        <element name="num1" type="int"/>
                        <element name="num2" type="int"/>
                    </sequence>
                </complexType>
            </element>

            <element name="AddResponse">
                <complexType>
                    <sequence>
                        <element name="result" type="int"/>
                    </sequence>
                </complexType>
            </element>

            <element name="SubtractRequest">
                <complexType>
                    <sequence>
                        <element name="num1" type="int"/>
                        <element name="num2" type="int"/>
                    </sequence>
                </complexType>
            </element>

            <element name="SubtractResponse">
                <complexType>
                    <sequence>
                        <element name="result" type="int"/>
                    </sequence>
                </complexType>
            </element>
        </schema>
    </types>

    <!-- Message: Define the abstract data types for input and output messages -->
    <message name="AddInput">
        <part name="parameters" element="tns:AddRequest"/>
    </message>

    <message name="AddOutput">
        <part name="parameters" element="tns:AddResponse"/>
    </message>

    <message name="SubtractInput">

WSDL ืžืฉื•ื™ืš ืœืชืงื ื™ ืฉื™ืจื•ืชื™ ืื™ื ื˜ืจื ื˜ ื›ืžื• SOAP (Simple Object Access Protocol) ื•ืžืืคืฉืจ ืœืœืงื•ื—ื•ืช ืœืชืงืฉืจ ืขื ืฉื™ืจื•ืชื™ ืื™ื ื˜ืจื ื˜ ื‘ืืžืฆืขื•ืช ื”ื•ื“ืขื•ืช SOAP. ืขื ื–ืืช, ืขื ื”ืคื•ืคื•ืœืจื™ื•ืช ืฉืœ ืฉื™ืจื•ืชื™ ืื™ื ื˜ืจื ื˜ ืฉืœ RESTful ื”ืžืฉืชืžืฉื™ื ื‘-HTTP ื•-JSON, WSDL ื ืžืฆื ืคื—ื•ืช ื‘ืฉื™ืžื•ืฉ ื‘ืืจื›ื™ื˜ืงื˜ื•ืจื•ืช ืžื•ื“ืจื ื™ื•ืช ืฉืœ ืฉื™ืจื•ืชื™ ืื™ื ื˜ืจื ื˜ ืฉืœ RESTful, ืฉื›ืŸ ืžืžืฉืงื™ API ืฉืœ RESTful ื”ื ื‘ื“ืจืš ื›ืœืœ ืชื™ืื•ืจื™ื™ื ืขืฆืžื™ื™ื ื•ื ื™ืชืŸ ืœื’ืœื•ืช ืื•ืชื ื“ืจืš ื ืงื•ื“ื•ืช ื”ืงืฆื” ืฉืœ ื”-API ืขืฆืžื ื‘ืืžืฆืขื•ืช ื˜ื›ื ื•ืœื•ื’ื™ื•ืช ื›ืžื• OpenAPI/Swagger ืื• ืกื›ื™ืžืช JSON.

ืžื” ืžืฉื•ืชืฃ ืœ RPC ื• WSDL

ืื ื ืฉื™ื ืœื‘ ื‘ืฉื ื™ ื”ืžืงืจื™ื ื”ื’ื“ืจื ื• ืื™ื–ื” ื—ื•ื–ื”, ื‘ RPC ืืžืจื ื• ืฉื™ืฉ ืžื™ืžื•ืฉื™ื ืฉืžืฆืจื™ื›ื™ื ืžืื™ืชื ื• ืœื™ื™ืฆืจ stubs ื‘ืฆื“ ืœืงื•ื— ื•ื‘ WSDL ื‘ืกื•ืคื• ืฉืœ ื“ื‘ืจ ื” XML ื”ื•ืคืš ืœื”ื™ื•ืช ืงื•ื“ ื‘ืฆื“ ืœืงื•ื— ืฉืฆืจื™ืš ืชืžื™ื“ ืœื”ื™ื•ืช ืžืกื•ื ื›ืจืŸ ืขื ื”ื—ื•ื–ื”. ื”ื—ืกืจื•ืŸ ื”ืขื™ืงืจื™ ืฉืœ ืฉื™ืจื•ืชื™ื ืืœื• ื”ื ืงืจืื™ื ืžื‘ื•ืกืกื™ ื—ื•ื–ื”, ื”ื ืฉื”ืฉืจืช ื•ื”ืœืงื•ื— ืชืžื™ื“ ืฆืจื™ื›ื™ื ืœื”ื™ื•ืช ืžืกื•ื ื›ืจื ื™ื ื‘ื™ื ื”ื ืขืœ ื”ื—ื•ื–ื” , ืื ื”ืฉืจืช ืžืฉื ื” ืืช ื”ื—ื•ื–ื” ืฆืจื™ืš ืœื™ื™ืฆืจ ืืช ื”ื›ืœ ืžื—ื“ืฉ.

Rest

ื–ื” ื“ื•ื’ืžื” ืœืฉื™ืจื•ืช ืฉืื™ื ื• ืžื‘ื•ืกืก ื—ื•ื–ื”, ืื™ืŸ ืฆื•ืจืš ืœื”ื•ืจื™ื“ ื›ืœื•ื ื‘ืฆื“ ืœืงื•ื— ื•ื”ืชืงืฉื•ืจืช ื”ื™ื ืขืœ ื‘ืกื™ืก API ืฉืžื‘ื•ืกืก ืขืœ URL ื•ื‘ืงืฉื•ืช HTTP.

RESTful API (Representational State Transfer API) ื”ื•ื ืกื’ื ื•ืŸ ืืจื›ื™ื˜ืงื˜ื•ื ื™ ืœืขื™ืฆื•ื‘ ื™ื™ืฉื•ืžื™ื ื‘ืจืฉืช, ื‘ืžื™ื•ื—ื“ ืฉื™ืจื•ืชื™ ืื™ื ื˜ืจื ื˜, ื”ืžืฉืชืžืฉื™ื ื‘ืฉื™ื˜ื•ืช HTTP ืกื˜ื ื“ืจื˜ื™ื•ืช (GET, POST, PUT, DELETE) ื›ื“ื™ ืœื‘ืฆืข ืคืขื•ืœื•ืช CRUD (ื™ืฆื™ืจื”, ืงืจื™ืื”, ืขื“ื›ื•ืŸ, ืžื—ืง) ืขืœ ื”ืžืฉืื‘ื™ื ื”ืฉื•ื ื™ื. ืžืžืฉืงื™ API ืฉืœ RESTful ื‘ื ื•ื™ื™ื ืขืœ ืขืงืจื•ื ื•ืช REST, ืฉื”ื™ื ื’ื™ืฉื” ืœื‘ื ื™ื™ืช ืฉื™ืจื•ืชื™ ืื™ื ื˜ืจื ื˜ ื ื™ืชื ื™ื ืœื”ืจื—ื‘ื” ื•stateless

ืขืงืจื•ื ื•ืช ืžืคืชื— ืฉืœ REST:

  1. Stateless: ื›ืœ ื‘ืงืฉื” ื—ื™ื™ื‘ืช ืœื”ื›ื™ืœ ืืช ื›ืœ ื”ืžื™ื“ืข ื”ื“ืจื•ืฉ ื›ื“ื™ ืœื”ื‘ื™ืŸ ื•ืœืขื‘ื“ ืืช ื”ื‘ืงืฉื”. ื”ืฉืจืช ืœื ืฉื•ืžืจ ืืช ื”ืžื™ื“ืข ื”ืจืœื•ื•ื ื˜ื™ ืขื‘ื•ืจ ื‘ืงืฉื” ื‘ืจื’ืข ืฉื”ื™ื ื ืฉืžืจืช ื”ื•ื ืจืง ืžื—ื–ื™ืจ ืชืฉื•ื‘ื”.
  2. CRUD: ื‘ืืžืฆืขื•ืช ืคืขื•ืœื•ืช HTTP ืฉื“ื™ื‘ืจื ื• ืขืœื™ื”ื ื ื•ื›ืœ ืœื‘ืฆืข ืคืขื•ืœื•ืช CRUD.
  3. ื›ืœ ื“ื‘ืจ ื”ื•ื ืžืฉืื‘ ื”ืžื–ื•ื”ื” ืขืœ ื™ื“ื™ URI, ื‘ืžืงืจื” ืฉืœ REST ื–ื” ื™ื”ื™ื” URL ืฉืžื—ื–ื™ืง ื‘ืกื›ืžื” ืฉืœื• ืืช ื”ืคืจืžื˜ืจื™ื ื”ื“ืจื•ืฉื™ื ืœืžืฉื™ื›ื”.
  4. State Codes: ืฉื™ืจื•ืชื™ REST ืžืฉืชืžืฉื™ื ื‘ืกื˜ื ื“ืจื˜ ืฉืœ HTTP ื‘ืฉื‘ื™ืœ ืœื”ื—ื–ื™ืจ ืกื˜ื˜ื•ืก ื‘ืงืฉื•ืช.

Pasted image 20230727185252.png

Server to Client Communication

ืจื•ื‘ ื”ื˜ื›ื ื™ืงื•ืช ืฉืจืื™ื ื• ืžืงื•ื“ื ื”ื’ื“ื™ืจื• ืชืงืฉื•ืจืช ืฉืžื‘ื•ืกืกืช ื‘ืขื™ืงืจ ืขืœ ืชืงืฉื•ืจืช ืœืงื•ื— ืœืฉืจืช. ื›ืœื•ืžืจ ื”ืœืงื•ื— ืฆืจื™ืš ืžืฉื”ื• ืžื”ืฉืจืช, ื”ื•ื ื™ื‘ืงืฉ ืžืžื ื• ื‘ืืžืฆืขื•ืช ื—ื•ื–ื” ืื• API ื•ื”ืฉืจืช ื™ื“ืข ืžื” ื”ื•ื ื‘ื™ืงืฉ ื•ื™ื—ื–ื™ืจ ืชืฉื•ื‘ื” ื‘ื”ืชืื.
ื›ืขืช ื ืจืื” ื›ืžื” ื˜ื›ื ื™ืงื•ืช ืฉื‘ืืžืฆืขื•ืชืŸ ื”ืฉืจืช ื™ื›ื•ืœ ืœืขื“ื›ืŸ ืืช ื”ืœืงื•ื— ื‘events.

Polling

ื‘ืฉื™ื˜ื” ื–ื• ื”ืœืงื•ื— ื™ืฉืœื— ื›ืœ ื–ืžืŸ ืงืฆื•ื‘ ื‘ืงืฉื” ืœืฉืจืช ื‘ืฉื‘ื™ืœ ืœืงื‘ืœ ืืช ื”ื“ืฃ ืžื—ื“ืฉ. ื”ื™ืชืจื•ืŸ ืฉืœ ื–ื”
ื”ื•ื ืฉื›ืš ืื ื—ื ื• ื ื•ื›ืœ ืœื”ื™ื•ืช ืžืขื•ื“ื›ื ื™ื ื‘ืžื™ื“ืข ืื‘ืœ ื”ื—ื™ืกืจื•ืŸ ืฉืœ ื–ื” ื”ื•ื ืฉื™ื™ืชื›ืŸ ืฉื”ืžื™ื“ืข ืœื
ื™ืชืขื“ื›ืŸ ื•ื ืฉืœื— ื”ืžื•ืŸ ื‘ืงืฉื•ืช ืกืชื. ื—ื™ืกืจื•ืŸ ื ื•ืกืฃ ื™ื”ื™ื” ืฉืื ื ืฉืœื— ื‘ืงืฉื” ื›ืœ ืคืจืง ื–ืžืŸ ื™ื—ืกื™ืช ื’ื“ื•ืœ , ื ื ื™ื— ื“ืงื”, ืœื ื ืงื‘ืœ ืืช ื”ืžื™ื“ืข ื‘ื–ืžืŸ ืืžืช. ืขื•ื“ ื—ื™ืกืจื•ืŸ ืฉื™ืฉ ื‘ื–ื” ื”ื•ื ืฉื ืฆื˜ืจืš ืœืขื“ื›ืŸ ืืช ื” -UI ื”ืจื‘ื” ืคืขืžื™ื.

AJAX Polling

Asynchronous javascript and XML, ื‘ืขืฆื ื–ื” ื”ืžื ื’ื ื•ืŸ ืžืื—ื•ืจื™ fetch API ืฉืœ JS.
ืื ื—ื ื• ืžื‘ืฆืขื™ื Polling ืœืžื™ื“ืข ื”ื“ืจื•ืฉ ื•ืœื ืœื›ืœ ื”ืžืžืฉืง ืžืฉืชืžืฉ ื›ืš ืฉืื ื—ื ื• ืขื“ื™ื™ืŸ ื ืฉืืจื™ื ืขื ืžืจื‘ื™ืช ื”ื—ืกืจื•ื ื•ืช ืฉืœ ืขืงืจื•ืŸ ื”polling.

Long Polling

ืฉื™ื˜ื” ื–ื• ื“ื•ืžื” ืœืงื•ื“ืžื•ืชื™ื” ืคืจื˜ ืœื›ืš ืฉืื ื—ื ื• ืœื ื ืฉืœื— ื‘ืงืฉื” ืœืฉืจืช ื›ืœ ืขื•ื“ ืœื ืงื™ื‘ืœื ื• ืžืžื ื• ืชืฉื•ื‘ื” ื‘ื—ื–ืจื”. ื”ืฉื•ื ื™ ื™ื”ื™ื” ื‘ื”ืชื ื”ื’ื•ืช ืฉืœ ื”ืฉืจืช. ื‘ืฉื™ื˜ื” ื–ื• ื”ืฉืจืช ืœื ื™ื—ื–ื™ืจ ืชืฉื•ื‘ื” ื›ืœ ืขื•ื“ ืื™ืŸ ืขื“ื›ื•ืŸ ืœืžื™ื“ืข ืฉืื ื—ื ื• ืžื—ืคืฉื™ื.

Streaming

ืชืงืฉื•ืจืช ืžื•ืœ ื”ืฉืจืช ืฉื ืขืฉืช ืชื—ืช ื—ื™ื‘ื•ืจ ืื—ื“ ืืœื™ื•. ื›ืœื•ืžืจ ืœื ื ืฆื˜ืจืš ืœืฉืœื•ื— ื‘ืงืฉื” ืœืฉืจืช ื›ืœ ื”ื–ืžืŸ ื”ื•ื ืคืฉื•ื˜ ื™ื•ื›ืœ ืœืฉืœื•ื— ืœื ื• ืขื“ื›ื•ื ื™ื ื›ืœ ื”ื–ืžืŸ ื‘ื–ืžืŸ ืืžืช.
ื”ื—ืกืจื•ืŸ ื”ื•ื ื›ืžื•ื‘ืŸ ืฉืฆืจื™ืš ืœืชื—ื–ืง ืืช ื”ื—ื™ื‘ื•ืจ ืื‘ืœ ื’ื ืžืฉื™ืงื•ืœื™ ืื‘ื˜ื—ื” ื–ื” ื™ื›ื•ืœ ืœื”ื™ื•ืช ื‘ืขื™ื™ืชื™ ืœื”ื—ื–ื™ืง ืชืงืฉื•ืจืช ืืจื•ื›ื” ืžื“ื™ ื•ืœื›ืŸ ื™ื›ื•ืœ ืœื”ื™ื•ืช ืฉื”ื™ื ืขืœื•ืœื” ืœื”ื—ืกื ืขืœ ื™ื“ื™ ืชื•ื›ื ื•ืช ื”ื’ื ื” ื›ืืœื” ื•ืื—ืจื•ืช.

WebSockets

WebSockets ื”ื•ื ืคืจื•ื˜ื•ืงื•ืœ ืชืงืฉื•ืจืช ื”ืžืกืคืง ืขืจื•ืฆื™ ืชืงืฉื•ืจืช ื“ื•-ื›ื™ื•ื•ื ื™ ื“ื•-ื›ื™ื•ื•ื ื™ ืžืœื ืขืœ ื—ื™ื‘ื•ืจ TCP ื™ื—ื™ื“. ื–ื” ืžืืคืฉืจ ื—ื™ืœื•ืคื™ ื ืชื•ื ื™ื ื‘ื–ืžืŸ ืืžืช, ื“ื™ืœื™ื™ ื ืžื•ืš ื•ื™ืขื™ืœ ื‘ื™ืŸ ืœืงื•ื— (ื‘ื“ืจืš ื›ืœืœ ื“ืคื“ืคืŸ ืื™ื ื˜ืจื ื˜) ืœืฉืจืช. ื‘ื ื™ื’ื•ื“ ืœื‘ืงืฉื•ืช HTTP ืžืกื•ืจืชื™ื•ืช, ืฉื”ืŸ stateless ื•ื—ื“-ื›ื™ื•ื•ื ื™ื•ืช, WebSockets ืžืืคืฉืจื•ืช ืชืงืฉื•ืจืช ืจืฆื™ืคื” ื“ื•-ื›ื™ื•ื•ื ื™ืช, ืžื” ืฉื”ื•ืคืš ืื•ืชืŸ ืœืื™ื“ื™ืืœื™ื•ืช ืขื‘ื•ืจ ื™ื™ืฉื•ืžื™ื ื‘ื–ืžืŸ ืืžืช ื•ืชื›ื•ื ื•ืช ืื™ื ื˜ืจืืงื˜ื™ื‘ื™ื•ืช ื‘ืืชืจื™ ืื™ื ื˜ืจื ื˜.

ื–ืืช ื“ืจืš ืžืื•ื“ ื™ืขื™ืœื” ืœืžืžืฉ streaming ื‘ืืžืฆืขื•ืช handshake ืฉื ืขืฉื” ื‘ื™ืŸ ื”ืฉืจืช ืœืœืงื•ื— (ื›ืœื•ืžืจ ืชืงืฉื•ืจืช ืžื‘ื•ืกืกืช ื—ื•ื–ื”) ื›ื“ื™ ืœืืคืฉืจ ื—ื™ื‘ื•ืจ ืจืฆื™ืฃ ื‘ื™ื ื”ื.

Socket.IO

Socket.IO ื”ื™ื ืกืคืจื™ื™ืช JavaScript ื”ืžืืคืฉืจืช ืชืงืฉื•ืจืช ื“ื•-ื›ื™ื•ื•ื ื™ืช ื‘ื–ืžืŸ ืืžืช ื‘ื™ืŸ ืœืงื•ื—ื•ืช (ื‘ื“ืจืš ื›ืœืœ ื“ืคื“ืคื ื™ ืื™ื ื˜ืจื ื˜) ื•ืฉืจืชื™ื. ื”ื•ื ืžืชื‘ืกืก ืขืœ ืคืจื•ื˜ื•ืงื•ืœ WebSockets ืืš ืชื•ืžืš ื’ื ื‘ืžื ื’ื ื•ื ื™ ื—ื–ืจื” ืื—ืจื™ื ื›ืžื• long polling ื•ืžืฉืชืžืฉ ื‘-API ืžืื•ื—ื“ ื”ืžืคืฉื˜ ืชืงืฉื•ืจืช ื‘ื–ืžืŸ ืืžืช ืขืœ ืคื ื™ ืคืœื˜ืคื•ืจืžื•ืช ื•ื“ืคื“ืคื ื™ื ืฉื•ื ื™ื.

ื ืกืชื›ืœ ืขืœ ื”ืžื™ืžื•ืฉ ื”ื‘ื :

//backend
 const express = require('express');
 const app = express();
 const http = require('http');
 const server = http.createServer(app);
 const { Server } = require("socket.io");
 const io = new Server(server);

 app.get('/', (req, res) => { res.sendFile(__dirname + '/index.html');
 });

 io.on('connection', (socket) => {
	 io.emit('hello', { foo : 'bar' });
	 socket.broadcast.emit('hi');
	 socket.on('disconnect', () => {
		 console.log('disconnected');
	 });
	 socket.on('foo', (msg) => {
		 console.log('message: ' + msg);
	 });
 });

 server.listen(3000);

ื‘ืงื•ื“ ื”ื–ื” ืืคืฉืจ ืœืจืื•ืช ืฉื™ืฆืจื ื• ืื•ื‘ื™ื™ืงื˜ ืฉืจืช ืžื”ืฉืจืช http ืฉื™ืฆืจื ื•. ื‘ืขืฆื ื”ืฆืžื“ื ื• ืœืฉืจืช ืืช ื”api ืฉืœ socket.io ื•ื›ืขืช ืืคืฉืจ ืœื”ืจืฉื ื•ืœืฉืœื•ื— ืื™ืจื•ืขื™ื ืœืœืงื•ื—.

//client
 <html>
	<body>
	  <script src="/socket.io/socket.io.js"></script>
	  <script>
		  var socket = io();
		 socket.emit('foo', 'bar');
		 socket.on('hello', function(msg) {
			 console.log(msg);
		 });
    </script>
  </body>
</html>

SocketIO ืžืืคืฉืจืช ืœื ื• ื ื™ื”ื•ืœ ืื™ืจื•ืขื™ื ื‘ืจืžื” ืจื—ื‘ื” ื™ื•ืชืจ ืžืกืชื ืฉืœื™ื—ื” ื•ื‘ืงืฉื”, ืœืžืฉืœ ื ื•ื›ืœ ืœืจืฉื•ื ืœืงื•ื—ื•ืช ืœืื™ืจื•ืข ืžืกื•ื™ื™ื ื•ืจืง ืขื‘ื•ืจื ืœื”ืคื™ืฅ event ืžืกื•ื™ื™ื.

io.on("connection", (socket) => {
    console.log(`User Connected: ${socket.id}`);

    socket.on("join_room", (data) => {
        socket.join(data);
        console.log(`User with ID: ${socket.id} joined room: ${data}`);
    });

    socket.on("send_message", (data) => {
        socket.to(data.room).emit("receive_message", data);
    });

    socket.on("create_contact", (data) => {
        socket.broadcast.emit("add_new_contact", data);
    });

    socket.on("disconnect", () => {
        console.log("User Disconnected", socket.id);
    });

    socket.on("delete_contact", (data) => {
        socket.to(data.room).emit("recived_delete", data);
        socket.leave(data.room);
    });
});