Server
Ən təməl mənada Server, bir şəbəkə üzərində müəyyən bir ünvanda (IP) və portda klientlərdən (clients) gələn bağlantı istəklərini dinləyən və qəbul edən bir proqram və ya cihazdır. Veb kontekstində isə adətən HTTP(S) kimi protokollarla gələn istəkləri emal etmək üçün ixtisaslaşmış proqram təminatlarını (məsələn: Jetty, Tomcat, Nginx, Apache HTTP Server) nəzərdə tuturuq.
Arxa Planda Necə İşləyir
Socket Listening
- Server proqramı başladıldıqda, əməliyyat sistemindən (ƏS) müəyyən IP:PORT cütlüyündə bir
TCP socket
açmasını istəyir. bind()
sistem çağırışı ilə socket ünvana bağlanır.listen()
çağırışı ilə server bağlantıları qəbul etməyə hazır olur.
Connection Acceptance
- Klient TCP bağlantısı qurmaq istədikdə (3-way handshake), ƏS bu istəyi dinləmə növbəsinə əlavə edir.
- Server proqramı
accept()
ilə bu bağlantıları götürür. - Hər
accept()
çağırışı yeni bir socket descriptor qaytarır — bu, klient-server arasında rabitə kanalını yaradır.
Request Reading & Protocol Parsing
- Server, yeni bağlantıdan gələn raw bytes məlumatları oxuyur.
- Məlumat HTTP formatındadır (məs:
GET /index.html HTTP/1.1\r\nHost: example.com
). - HTTP parser aşağıdakıları təhlil edir:
- HTTP metodu (GET, POST və s.)
- URI
- HTTP versiyası
- Headers
- Body (əgər varsa)
Concurrency Handling
Serverlər eyni anda minlərlə bağlantını idarə edə bilməlidir. Aşağıdakı modellərdən istifadə olunur:
a. Thread-Per-Connection
- Hər bağlantı üçün bir thread yaradılır.
- Sadədir, amma çoxlu bağlantıda resurs israfına səbəb ola bilər.
b. Thread Pool
- Əvvəlcədən yaradılmış thread hovuzundan istifadə olunur.
- Məs: Jetty-də
QueuedThreadPool
- Daha effektiv resurs istifadəsi.
c. Event-Driven / Non-blocking I/O (NIO)
- Tək və ya az sayda thread ilə minlərlə bağlantı idarə edilir.
- ƏS-in hadisə mexanizmlərindən (
epoll
,kqueue
və s.) istifadə olunur. - Məşhur nümunələr: Nginx, Node.js, Jetty NIO, Tomcat NIO, Undertow
How Server works
Serverin əsas işi:
- Gələn rabitə tələblərini qəbul etmək
- Protokolu müəyyənləşdirmək (HTTP parsing)
- Tələbi uyğun komponentə ötürmək
- Cavabı klientə geri göndərmək
Əsas fokus: şəbəkə əlaqəsi, protokol analizi, paralel emal.
Handler
Server, xam istəyi ayrışdırdıqdan sonra, "bu istəklə nə edəcəyəm?" sualına cavab Handler komponentlərində tapılır.
Handler – istəyi emal edən, dəyişən, cavab yaradan və ya başqa Handler-a ötürən kod blokudur. Jetty kimi modulyar serverlərdə əsas konsepsiyadır.
Arxa Planda Necə İşləyir
Chain/Tree Structure
- Handler-lar
chain of responsibility
və ya ağac (tree) kimi konfiqurasiya edilir. - İstək bu strukturdan keçərək ardıcıl işlənir.
handle()
Metodu
- Hər Handler-də
handle(Request, Response)
metod olur. - Server istəyi ilk Handler-a bu metodla ötürür.
Responsibility and Delegation
Handler aşağıdakıları edə bilər:
- Cavabı özü istehsal edə bilər (məs:
ResourceHandler
). - Əməliyyat aparıb növbəti Handler-a ötürə bilər (məs:
RequestLogHandler
,SecurityHandler
). - Alt handler-lara yönləndirə bilər (məs:
ContextHandler
). - Emal vəziyyətini işarələyə bilər – cavab artıq yaradılıbsa növbəti handler-lar atlanır.
How Handler works
Handler-lar veb istəkləri kiçik, modul, təkrar istifadə edilə bilən hissələrə bölür. Hər biri spesifik funksiyanı yerinə yetirir:
- Loglama
- Təhlükəsizlik yoxlaması
- Sessiya idarəetməsi
- Statik fayl təqdimatı
- Servlet emalı və s.
Bu model serveri çevik və genişləndirilə bilən edir.
Mapping
Serverə /users
, /products/123
, /admin/login
kimi müxtəlif URL-lər gəlir. Mapping, bu istəkləri doğru handler və ya kod blokuna yönləndirmə prosesidir.
Arxa Planda Necə İşləyir
URL Pattern Matching
İstək URL-ləri əvvəlcədən təyin edilmiş pattern-lərlə uyğunlaşdırılır.
Eşləşmə növləri:
- Exact Match →
/login
yalnız/login
ilə - Prefix Match →
/admin/*
→/admin/users
,/admin/settings
- Suffix Match →
.do
→/edit.do
,/delete.do
- Root Match →
/
→ Default fallback pattern
Configuration Sources
URL pattern-ləri müxtəlif yollarla təyin edilə bilər:
web.xml
→ Java EE-də<servlet-mapping>
ilə- Annotations →
@WebServlet("/users")
- Programmatic Configuration → Məs:
ServletContextHandler.addServlet()
ilə kod daxilində
Handler Responsibility
Mapping adətən xüsusi Handler tərəfindən idarə olunur:
- Jetty-də →
ContextHandler
,ServletHandler
How Mapping works
Mapping, istəklərin doğru yerə yönləndirilməsi üçün əsas mexanizmdir. Handler-lar axını idarə edərkən, Mapping bu axının marşrutunu təyin edir.