ืืื ืืืืืฉ ืืืื ืืจื ื ืืืืฉื ืฉืื ื ืฆืจืื ืืืฆืืจ ืงืฉืจ ืขื ืฉืจืช ืืจืืืง, ืฉืืืืกื ืืช ืืืชืจ ืืืื ืื ืื ื ืจืืฆืื ืืืฉืช.
ืืชืืืื ืื ืืกืคืจ ืฉืืืื
ืืืฉืืืืช ืฉื ืืขืืจืช ืืืืข ืืจืฉืช ืืืืจืื ืืช ืืืื ื ืฉื ืฉืืืืช. ืืืืืืจ ืืื ืคืขืืืช ืืฉืืืืช ืืื ืฉืืืคืฉืจ ืืช ืืขืืจืช ืืืืืข ืืืื ืืจื ืืืฉืจ ืื ืฉืืื ืืืจืืืช ืขื ืืืง ืืืจ ืืชืืืื ืืืืจืื ืฉื ืืขืืจืช ืืืืืข ืืจืฉืช ืืืืืจื.
ืืืืื ื ืงืจื ืืืื ืืืฉืช ืืฉืืืืช
ื ืืชื ืืืืฉ ืืืืืืืฃ ืืช ืืฉืืืืช ืืื ืืื ื ืืืืืฉืื ืืจืฆืื ื ื.
ืืชืืงื ืืฉืืืช ืืืคืืืงืฆืืื:
ืืืฉืืืืื ืืงืฉืช ืืื ืืจื ื ืื ืื ื ืืขืฆื ืขืืฉืื ืืื ืืืจืื ืืจืื ืืืืช
GET
ืขืืืจืช ืืฉืืืืช ืืฉืื ืืช ืขื ืฉืืืืขื ืืฉืจืช (ืืืฉื ืืฉืืืช ื Transport ื ืขืฉื ืืืืืจ ืืฉืจืช ืืืืฆืขืืช ืคืจืืืืงืื TCP ืืื ืืืืืข ื ืฉืื ืืฉืืืช ืืจืฉืช).ืืงืฉืช GET ื ืจืืช ืืื ืืจืื
ืืืืืคื ืืืื ืืืชืจ ืืชืงืฉืืจืช (ืืฉืืืช ืืืคืืืงืฆืืื) ื ืจืืช ืืื
ืืืืขืืช HTTP ืื ืืืืคื ืฉืื ื ืชืื ืื ืืืืืคืื ืืื ืฉืจืช ืืืงืื. ืืฉื ื ืฉื ื ืกืืืื ืฉื ืืืืขืืช: ืืงืฉืืช ืฉื ืฉืืื ืขื ืืื ืืืงืื ืืืคืขืืช ืคืขืืื ืืฉืจืช, ืืชืืืืืช, ืืชืฉืืื ืืืฉืจืช.
ืืืืขืืช HTTP ืืืจืืืืช ืืืืืข ืืงืกืืืืื ืืืงืืื ื-ASCII, ืืืชืคืจืฉืืช ืขื ืคื ื ืืกืคืจ ืฉืืจืืช. ื-HTTP/1.1 ืืืืืจืกืืืช ืงืืืืืช ืฉื ืืคืจืืืืงืื, ืืืืขืืช ืืื ื ืฉืืื ืืืืื ืืจื ืืืืืืจ. ื-HTTP/2, ืืืืืขื ืฉืคืขื ืืืืชื ื ืืชื ืช ืืงืจืืื ืื ืืฉืืช ืืืืืงืช ืืขืช ืืืกืืจืืช HTTP, ืื ืฉืืกืคืง ืืืคืืืืืืฆืื ืืฉืืคืืจื ืืืฆืืขืื.
ืืงืฉืืช ืืชืฉืืืืช ืHTTP ืืืืงืื ืืื ื ืืืื ืืืืจืืืื ื
ืืงืฉืืช HTTP ืื ืืืืขืืช ืฉื ืฉืืืืช ืขื ืืื ืืืงืื ืืื ืืืืื ืคืขืืื ืืฉืจืช. ืงื ืืืชืืื ืฉืืื ืืืื ืฉืืืฉื ืืืื ืืื:
HTTP method
ืืชืืจ ืืืื ืคืขืืื ืืืงืฉื ืจืืฆื ืืขืฉืืช:
GET
- ืืืงืฉืช ืืงืื ืืฉืื ืืกืืืื.
HEAD
- ืืืงืฉืช ืืช ืืืชื ืชืืืื ืืื ืืงืฉืช ื GET
ืจืง ืืื ื body.
POST
- ืฉืืืื ืฉื ืืืฉืืช ืขืืืจ ืืฉืื ืืกืืืื ืืืขืจืืช, ืืขืชืื ืืืช ืืฉื ื ืืช ื state ืฉืื ืื ืืฉืคืืขื ืขื ืืฉืจืช.
DELETE
- ืืืืงื ืฉื ืืฉืื ืืกืืืื.
PUT
-ืืืืคื ืฉื ืืฉืื ืืกืืืื ืืชืืื ืืืงืฉื.
PATCH
- ืืืฆืืข ืืืืืคืืงืฆืื ืฉื ืืฉืื ืืฉืจืช.
Request target
ืืืจื ืืื ืื URL ืื ื ืชืื ืืืกืืืืื ืฉืืืื ืืชืืื queries, ืคืืจื ืืืืณ.
ืืขืฆื ืื ืืืื ืืืืืช ืื ื ืชืื ืฉืืื ืืขืฆื ืืืจืื ืืืืื ื ืืืื ืฉื URL
HTTP version
ืืืจืกื ืงืืืขืช ืืช ืืืื ื ืฉื ืฉืืจ ืืืืืขื ืืื ืืื ืืืขืช ืืืฆื ืืื ืืช ืืช ืืชืืืื.
ืืืชืจืืช HTTP ืืืืฆืจืืช ืืงืฉื ืชืืช ืืืชื ืืื ื ืืกืืกื ืฉื Header HTTP: ืืืจืืืช ืื ืชืืืืช ืจืืฉืืืช ืืืืจืื ื ืงืืืชืืื (':') ืืขืจื ืฉืืืื ื ืฉืื ืชืืื ืHeader. ืืืืชืจืช ืืืื, ืืืื ืืขืจื, ืืืจืืืช ืืฉืืจื ืืืช ืืืืืช, ืฉืืืืื ืืืืืช ืืจืืื ืืืื.
ืื ืกืื ืฉื metadata ืขื ืืืงืฉื.
ืืืืง ืืืืจืื ืฉื ืืืงืฉื ืืื ืืืืฃ ืฉืื. ืื ืืื ืืืงืฉืืช ืืฉ ืืืช: ืืงืฉืืช ืฉืืืืืืช ืืฉืืืื, ืืื GET, HEAD, DELETE ืื OPTIONS, ืืืจื ืืื ืืื ื ืืงืืงืืช ืืืฉืืืื ืืืื. ืืืง ืืืืงืฉืืช ืฉืืืืืช ื ืชืื ืื ืืฉืจืช ืขื ืื ืช ืืขืืื ืืืชื: ืืคื ืฉืงืืจื ืืขืชืื ืงืจืืืืช ืืืงืฉืืช POST (ืืืืืืืช ื ืชืื ื ืืืคืก HTML).
ืืคื ืฉืืืจื ื ืืืื ื ืืื ืืืื ืRequest.
Status line
ืฉืืจืช ืืืชืืื ืฉื ืชืืืืช HTTP, ืื ืงืจืืช ืฉืืจืช ืืืฆื, ืืืืื ืืช ืืืืืข ืืื:
HTTP/1.1
Headers
ืืื ื ืืื ืืืืืืื ืฉื headers ืืืงืฉืช http. ืืืืื ืืืืื ืืื ืืงืื ืืงืกื ืฉืืฉ ืheaders ืืืื ืืืืืจ ืื ืืืฉืืขืืช ืฉืืื.
Body
ืืืืคื ืืืื ื HTTP Request. ืืืืืืช ืืืืข ืืืืืจ ืืืงืฉื. ืืจืื ืคืขืืื ืื ืื ื ื ืจืื ืืช ืื ืืืงืฉืืช ืืกืื GET.
ืืืืื ืืขืืงืจ ืืื ืฉืืืืืข ืืืขืืจ ื URL ืขืฆืื ืืืงืฉืืช GET ืืจื ื query , ืืขืื ืฉืPOST ืืืืืข ืขืืืจ ื body.
ืฉืจืช 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 ืฉื ืคืจืกืืจ ืืงืฉื ืืื ืื ืื ืื ื ืืฉืื ืืืจืื ืืื.
ืฉืจืช 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.
ืืื ืืืืืืืช 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 ืืืจืืืืงืืืจื ืฉืจืืื ื ืืื ืฉ
ืื ืื ื ืืืชืื ืชืื ืจืง ืฆืจืืืื ืืืืืื ืื ืืขืฉืืช ืืืฉืจ ืืืคืขืืืช ืืคืื ืงืฆืืืช ืืืื. ืืืืืจ ืื ืฉืื ืื ื ืฆืจืืืื ืืขืฉืืช ืืื ืืืืฉ ืืช ืืืืคืื ืืืงืฉืืช ืืฉืื ืืช ืืืชืงืืืืช, ืืืืืจ ืืืืืื ืื ืืฉืจืช ืฉืื ื ืืืืืจ.
public abstract class HttpServlet extends GenericServlet {
// ...
protected void doGet(HttpServletRequest req, HttpServletResponse resp);
protected void doPost(HttpServletRequest req, HttpServletResponse resp);
//...
}
ืืคืฉืจ ืืขืฉืืช ืืช ืืืชื ืืืจ ืขื ืืื ืืืืืื ืืืจืช โ php.
php ืืื ืฉืคืช ืกืงืจืืคื ืฉืชืจืืฅ ืืฆื ืฉืจืช ืืฉื ืืชื ืืืฉืชืืฉ ืื ืืื ืืงืืืข ืื ืืืื ืืชืืื ืฉืืืืจ ืืืงืฉืช ืืื ืืจื ื.
ืืฉืจืช HTTP ืืืื ืืืงืื ืืืฉืชืืฉ ื Servlet.
ืืืืืืจ php interpreter ืืืืชืื ืืืงืฉืืช ืืืืืขืืช ืืืจืืฅ ืืช ืืกืงืืคื php ืืืชืืื.
ื ืฉืื ืื ืฉืืื ืืชืืื ื ืช ืืื ืืืืืืจ HTML.
ืฉืจืช ืืฉืืืฅ, ืืืืืข ืื ืืฉืจืช ืืื ืืจื ื ืืฉืืืฅ, ืืื ืกืื ืฉื ืฉืจืช ืืืฉืืื ืืฉืืจืืช ืืืคืืืงืฆืื ืื ืืชืืื ื ืืืงืื ืืืืืช ืืืคืขื ืืืืฉืื ืฉืจืช ืขืฆืืื. ืื ืืืคืฉืจ ืืืคืชืืื ืืืืื ืคืื ืงืฆืืื ืืืืช ืฉืจืช ืืชืื ืืืคืืืงืฆืืืช ืฉืืื, ืื ืฉืืืคืฉืจ ืืื ืืืืืฉ ืชืืื ืืื ืืจื ื ืืืืืื ืืืงืฉืืช HTTP ืืื ืฆืืจื ืืืชืงื ืช ืฉืจืช ืืื ืืจื ื ืืืฆืื ื.
ื ืชืืื ื ืืชืจืฉืื ืืืืืื ืืจืืืืงืืืจืช ืฉืจืช ืฉืืื embedded
ืื ืืืื ืืืจืืืืจืืืงื standalone ืฉืื ืืฉืจืช ืจืง ืืืคื ืืืงืฉืืช ืืืืืืจ ืชืฉืืื. ืืื:
NodeJS
ืืืื ืขื express
ืืชื ื ืื ื)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, ืืืืื ื ืื ืืืฆืข ืืืืงืืช ืขื ืืืืข ืืืจ ืืืืงืฉื.
ืื 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 ืขืืืจ ืืกืืืืช
ืชืงืฉืืจืช ืกืื ืืจืื ืืช ืื-ืกืื ืืจืื ืืช ืื ืฉืชื ืืืฉืืช ืฉืื ืืช ืืืืคื ืฉืื ื ืชืื ืื ืื ืืืืขืืช ืืืืืคืื ืืืขืืืืื ืืื ืฉื ื ืฆืืืื ืื ืืืชืจ ืืืขืจืืช. ืืืืฉืืช ืืื ืืืคืืื ืื ืืจืืจืื ืืื ืืฉืืฉืืช ืืืงืฉืจืื ืฉืื ืื ืืืชืื ืืืืคื ืืืฉืืืืช ืืืืชื ืืืืช ืืืขืจืืช ืืจืฆืืื.
ืืืคืืคื ืงืืื ืชืฉืืื ืืืฉืจืช (ืืช ืื ืขืืื ืhtml, ืืืจืืช ืฉืื ืฆืจืื ืืช ืืืื) ืืชืืฆืื ืืื ืืืคืืคื ืืจืคืจืฉ ืืช ืืขืืื ืืฉืืื ืืืขืื ืืช ืืืืืข.
ืืืคืืคื ืืงืื ืชืฉืืื ืืืฉืจืช (ืจืง ืืช ืืืืืข ืื ืฆืจื) ืืชืืฆืื ืืื ืืืคืืคื ืืืขื ืืช ืืืืืข ืืขืืื ืืื ืืขืฉืืช ืจืืคืจืฉ.
ื ืืชื ืืขืฉืืช ืืืช ืขื ืืื ืืขืืจื ืฉื JSON ืฉืืืืฆื ืืช ืืืืืข ืฉืืงืืืคืื ื ืืืช ืReact ืืฉืชืืฉื ืืื ืืื ืืขืืื ืืช ืืืืืข.
Web Service ืืื ืืื ืืืืืื ืืืืคืฉืจืช ืืืืฉืืื ืชืืื ื ืฉืื ืื ืืชืงืฉืจ ืืืืืืืฃ ื ืชืื ืื ืืจื ืืืื ืืจื ื. ืืื ืืกืคืง ืืจื ืกืื ืืจืืืช ืืืืฉืืืื ืืืฆืืจ ืืื ืืจืืงืฆืื ืื ืขื ืื, ืืื ืงืฉืจ ืืฉืคืืช ืืชืื ืืช, ืืคืืืคืืจืืืช ืื ืืืืฉืืจืื ืขืืืื ืื ืคืืขืืื.
Web Server ื Web Services ืื ืฉืชื ืจืืืืื ืฉืืืืืื ืืืืื ืืช ื client ืฉืื ื ืืืืืข ืืืืืฉืง ืืฉืชืืฉ ืฉืืชืขืืื ืืฆืืจื ืืื ืืืช. ืืขืื ืฉ Web Server ืืื ืืจืื ืืืืืจ ืืืืฆืขืืช ืคืจืืืืงืื HTTP, ืฉืืจืืชื ืจืฉืช ืฆืจืืืื ืืืืืืจ API ืื ืืืื ืืืฉืื ืืื ืืืคืฉืจ ืืช ืชืงืฉืืจืช ืืืืืข ืืื ืื.
Remote Procedure Call Web Service
ืืื ืืื ืืืืืื ืืชืงืฉืืจืช ืืื ืืืฉืืืื ืืืืคืฉืจืช ืืชืืื ืืช ืืืฉื ืืืช ืืืคืขืื ืคืื ืงืฆืืื ืืชืืื ืืช ืืืฉื ืืืจืช ืืืืคื ืฉืงืืฃ, ืืืืืจ ืืื ืฆืืจื ืืืืฉืื ืคืจืื ื ืฉื ืคืจืืืืงืื ืืชืงืฉืืจืช.
ืืืืฆืขืืช RPC ื ืืชื ืืืืฉ ืชืงืฉืืจืช ืฉืจืช ืืงืื, ืื ืฉืืืงืื ืืคืขืื ืขื ืืฉืจืช ืืช ืืคืื ืงืฆืื ืืจืฆืืื ืชืื ืืขืืจืช ืืคืจืืืจืื ืื ืืจืฉืื ืืืืชืื ืืื ื ืืงืืืช ืืชืฉืืื, ืฉืืืจืืืช ืืคืขืืื ืขื ืืงืืืชื ืืืงืื ืื ืืืื ืืืืฉืื ืืคืขืืืชื.
ืืจืขืืื ืืื ืฉื ืืื ืืืคืขืื ืคืจืืฆืืืจืืช ืืชืืื ืืช ืืืฉื ืืืจืช ืืื ืืฉืืงืื ืืืืื ืฉืคื ืืื ืจืฆื.
ืืื ืื ืืืจืฉ ืืื ืฉืืืฉ ืืช ืืคืจืืืืงืื ืืืฆืืจ stubs
ืฉืืจืื ืืคืฉืจ ืืืืืข ืืืืืืฉ ืืจืืืื ืื ืืชืืื ืืช ืืืงืืืื.
ืืื ืืืืืืฉืื ืืืืืจืื ืืื gRPC ืฉืืืืืจ protocol buffers ืืstubs ืืืืฆืจืื ืขื ืืื ืืืคืชืืื ืฉืืื ืืืชืื ืืื ืฉืืชืื ืprotocol buffers.
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 ืืืจื ื ืฉืืฉ ืืืืืฉืื ืฉืืฆืจืืืื ืืืืชื ื ืืืืฆืจ stubs ืืฆื ืืงืื ืื WSDL ืืกืืคื ืฉื ืืืจ ื XML ืืืคื ืืืืืช ืงืื ืืฆื ืืงืื ืฉืฆืจืื ืชืืื ืืืืืช ืืกืื ืืจื ืขื ืืืืื. ืืืกืจืื ืืขืืงืจื ืฉื ืฉืืจืืชืื ืืื ืื ืงืจืืื ืืืืกืกื ืืืื, ืื ืฉืืฉืจืช ืืืืงืื ืชืืื ืฆืจืืืื ืืืืืช ืืกืื ืืจื ืื ืืื ืื ืขื ืืืืื , ืื ืืฉืจืช ืืฉื ื ืืช ืืืืื ืฆืจืื ืืืืฆืจ ืืช ืืื ืืืืฉ.
ืื ืืืืื ืืฉืืจืืช ืฉืืื ื ืืืืกืก ืืืื, ืืื ืฆืืจื ืืืืจืื ืืืื ืืฆื ืืงืื ืืืชืงืฉืืจืช ืืื ืขื ืืกืืก API ืฉืืืืกืก ืขื URL ืืืงืฉืืช HTTP.
RESTful API (Representational State Transfer API) ืืื ืกืื ืื ืืจืืืืงืืื ื ืืขืืฆืื ืืืฉืืืื ืืจืฉืช, ืืืืืื ืฉืืจืืชื ืืื ืืจื ื, ืืืฉืชืืฉืื ืืฉืืืืช HTTP ืกืื ืืจืืืืช (GET, POST, PUT, DELETE) ืืื ืืืฆืข ืคืขืืืืช CRUD (ืืฆืืจื, ืงืจืืื, ืขืืืื, ืืืง) ืขื ืืืฉืืืื ืืฉืื ืื. ืืืฉืงื API ืฉื RESTful ืื ืืืื ืขื ืขืงืจืื ืืช REST, ืฉืืื ืืืฉื ืืื ืืืช ืฉืืจืืชื ืืื ืืจื ื ื ืืชื ืื ืืืจืืื ืstateless
ืขืงืจืื ืืช ืืคืชื ืฉื REST:
ืจืื ืืืื ืืงืืช ืฉืจืืื ื ืืงืืื ืืืืืจื ืชืงืฉืืจืช ืฉืืืืกืกืช ืืขืืงืจ ืขื ืชืงืฉืืจืช ืืงืื ืืฉืจืช. ืืืืืจ ืืืงืื ืฆืจืื ืืฉืื ืืืฉืจืช, ืืื ืืืงืฉ ืืื ื ืืืืฆืขืืช ืืืื ืื API ืืืฉืจืช ืืืข ืื ืืื ืืืงืฉ ืืืืืืจ ืชืฉืืื ืืืชืื.
ืืขืช ื ืจืื ืืื ืืื ืืงืืช ืฉืืืืฆืขืืชื ืืฉืจืช ืืืื ืืขืืื ืืช ืืืงืื ืevents.
ืืฉืืื ืื ืืืงืื ืืฉืื ืื ืืื ืงืฆืื ืืงืฉื ืืฉืจืช ืืฉืืื ืืงืื ืืช ืืืฃ ืืืืฉ. ืืืชืจืื ืฉื ืื
ืืื ืฉืื ืื ืื ื ื ืืื ืืืืืช ืืขืืืื ืื ืืืืืข ืืื ืืืืกืจืื ืฉื ืื ืืื ืฉืืืชืื ืฉืืืืืข ืื
ืืชืขืืื ืื ืฉืื ืืืื ืืงืฉืืช ืกืชื. ืืืกืจืื ื ืืกืฃ ืืืื ืฉืื ื ืฉืื ืืงืฉื ืื ืคืจืง ืืื ืืืกืืช ืืืื , ื ื ืื ืืงื, ืื ื ืงืื ืืช ืืืืืข ืืืื ืืืช. ืขืื ืืืกืจืื ืฉืืฉ ืืื ืืื ืฉื ืฆืืจื ืืขืืื ืืช ื -UI ืืจืื ืคืขืืื.
Asynchronous javascript and XML, ืืขืฆื ืื ืืื ืื ืื ืืืืืจื fetch API ืฉื JS.
ืื ืื ื ืืืฆืขืื Polling ืืืืืข ืืืจืืฉ ืืื ืืื ืืืืฉืง ืืฉืชืืฉ ืื ืฉืื ืื ื ืขืืืื ื ืฉืืจืื ืขื ืืจืืืช ืืืกืจืื ืืช ืฉื ืขืงืจืื ืpolling.
ืฉืืื ืื ืืืื ืืงืืืืืชืื ืคืจื ืืื ืฉืื ืื ื ืื ื ืฉืื ืืงืฉื ืืฉืจืช ืื ืขืื ืื ืงืืืื ื ืืื ื ืชืฉืืื ืืืืจื. ืืฉืื ื ืืืื ืืืชื ืืืืช ืฉื ืืฉืจืช. ืืฉืืื ืื ืืฉืจืช ืื ืืืืืจ ืชืฉืืื ืื ืขืื ืืื ืขืืืื ืืืืืข ืฉืื ืื ื ืืืคืฉืื.
ืชืงืฉืืจืช ืืื ืืฉืจืช ืฉื ืขืฉืช ืชืืช ืืืืืจ ืืื ืืืื. ืืืืืจ ืื ื ืฆืืจื ืืฉืืื ืืงืฉื ืืฉืจืช ืื ืืืื ืืื ืคืฉืื ืืืื ืืฉืืื ืื ื ืขืืืื ืื ืื ืืืื ืืืื ืืืช.
ืืืกืจืื ืืื ืืืืื ืฉืฆืจืื ืืชืืืง ืืช ืืืืืืจ ืืื ืื ืืฉืืงืืื ืืืืื ืื ืืืื ืืืืืช ืืขืืืชื ืืืืืืง ืชืงืฉืืจืช ืืจืืื ืืื ืืืื ืืืื ืืืืืช ืฉืืื ืขืืืื ืืืืกื ืขื ืืื ืชืืื ืืช ืืื ื ืืืื ืืืืจืืช.
WebSockets ืืื ืคืจืืืืงืื ืชืงืฉืืจืช ืืืกืคืง ืขืจืืฆื ืชืงืฉืืจืช ืื-ืืืืื ื ืื-ืืืืื ื ืืื ืขื ืืืืืจ TCP ืืืื. ืื ืืืคืฉืจ ืืืืืคื ื ืชืื ืื ืืืื ืืืช, ืืืืื ื ืืื ืืืขืื ืืื ืืงืื (ืืืจื ืืื ืืคืืคื ืืื ืืจื ื) ืืฉืจืช. ืื ืืืื ืืืงืฉืืช HTTP ืืกืืจืชืืืช, ืฉืื stateless ืืื-ืืืืื ืืืช, WebSockets ืืืคืฉืจืืช ืชืงืฉืืจืช ืจืฆืืคื ืื-ืืืืื ืืช, ืื ืฉืืืคื ืืืชื ืืืืืืืืืืช ืขืืืจ ืืืฉืืืื ืืืื ืืืช ืืชืืื ืืช ืืื ืืจืืงืืืืืืช ืืืชืจื ืืื ืืจื ื.
ืืืช ืืจื ืืืื ืืขืืื ืืืืฉ streaming ืืืืฆืขืืช handshake ืฉื ืขืฉื ืืื ืืฉืจืช ืืืงืื (ืืืืืจ ืชืงืฉืืจืช ืืืืกืกืช ืืืื) ืืื ืืืคืฉืจ ืืืืืจ ืจืฆืืฃ ืืื ืื.
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);
});
});