Məzmuna keçLogo

Command Palette

Search for a command to run...

Server, Handler və Mapping — Arxa planda necə işləyir

Dərc olundu
10 apr 2025
Server, Handler və Mapping — Arxa planda necə işləyir

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 çevikgeniş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.


Thanks for reading.