Ochiq Kodli Freymvork

noServer

Noldan, faqat xom TCP soketlar ustida qurilgan, hech qanday bog'liqliksiz Node.js veb-freymvork — maxsus HTTP/1.1 parser va WebSocket, konfiguratsiyaga asoslangan routing, CRUD, CORS, rate limiting va statik fayllar. Veb-serverlar qanday ishlashini asoslardan o'rganish loyihasi.

Umumiy ma'lumot

Men noServer ni veb-server so'rovni boshqarganda aslida nima sodir bo'lishini tushunish uchun yaratdim — freymvorkning abstraktsiyasi orqali emas, balki xom soket darajasida. Hech qanday bog'liqlik: npm paketlari yo'q, http moduli yo'q. U HTTP/1.1 tahlilini, gibrid routerni, WebSocket, rate limiting, CRUD generatsiyasini va statik fayl xizmatini amalga oshiradi — barchasi bitta faylda, asoslardan.

Men nima qildim

  • Yagona muallif — har bir qatlamni noldan yaratdim: TCP soket boshqaruvi, HTTP tahlili, routing mexanizmi, WebSocket protokoli va ishlab chiquvchilar foydalanadigan konfiguratsiya API.

  • Yakuniy dizaynni asoslash uchun uchta turli routing strategiyasini o'lchadim — o'lchov natijalari qaror har doim kuzatilishi uchun kod bilan birgalikda amalga oshiriladi.

  • Server xatti-harakatini uchidan-uchiga tasdiqlash uchun HTTP/1.1 so'rov satrlarini qo'lda yaratuvchi xom-TCP test klientini yozdim — test kutubxonasi yo'q, faqat xom soketlar.

Arxitektura

Server xom TCP soketini ochadi va to'liq HTTP so'rovi kelmaguncha kiruvchi ma'lumotlarni buferlaydi — sarlavhalar keyin bo'sh qator va tana uchun Content-Length orqali aniqlanadi. Marshrutlar ikki tuzilmada saqlanadi: statik yo'llar uchun oddiy ob'ekt xesh-xarita (doimiy vaqtli qidiruv) va parametrlangan yo'llar uchun bitta kompilyatsiya qilingan regex, shuning uchun bitta mos qidiruv chaqiruvi marshrutni ushlaydi va barcha parametrlarni bir vaqtda ajratib oladi. WebSocket yangilash soketni qolgan umri davomida matn rejimidan ikkilik kadr rejimiga o'tkazadi.

Ichki tuzilishi

  • WebSocket RFC spetsifikatsiyasidan qo'lda amalga oshirilgan — handshake, kadr dekodlash va kadr kodlash, uch xil yuklanma uzunlik kodlamasini va XOR niqobdan chiqarishni o'z ichiga oladi. Ping avtomatik ravishda Pong bilan javob beriladi. npm dan hech narsa qarzga olinmagan.

  • Gibrid router ikkita muqobilga qarshi o'lchov o'tkazildi: statik yo'llar doimiy vaqtli qidiruv uchun xesh-xaritadan foydalanadi, dinamik yo'llar har bir marshrutning qayta ushlash guruhi ofseti oldindan hisoblanadigan bitta kompilyatsiya qilingan regex ishlatadi — shuning uchun bitta mos qidiruv chaqiruvi ham routing, ham parametr ajratishni amalga oshiradi. O'lchov 500k iteratsiyada chiziqli skanerlash va Hono-uslubini yengishini tasdiqladi.

  • HTTP tana to'liqlik qo'riqchisi: server kiruvchi ma'lumotlarni buferlaydi va faqat Content-Length tomonidan va'da qilingan barcha baytlar kelganida so'rovni yuboradi — takrorlash qiyin bo'lgan qisman tana qayta ishlash xatolarini oldini oladi.

Men nimani o'rgandim

  • HTTP ni noldan amalga oshirish menga freymvorklar nimani yashirishini aniq ko'rsatdi — va ular nima uchun mavjudligini qadrlaydigan qildi. 'Ta'limiy' va 'ishlab chiqarishga tayyor' o'rtasidagi chegara haqiqiy.

  • Birini tanlashdan oldin routing algoritmlarini o'lchash keyinchalik vaqt tejadi — repoda raqamlar bo'lishi qarorni qayta muhokama qilmasligimni anglatadi.

Texnologiyalar

Ishlash Vaqti

  • Node.js
  • net (TCP)
  • crypto
  • fs
  • path

Noldan Qurilgan (Hech qanday bog'liqlik yo'q)

  • HTTP/1.1 parser
  • RFC 6455 WebSocket
  • Hybrid router
  • Rate limiter
  • Auto-CRUD store
  • ETag caching
  • Static file server

Asboblar

  • node --watch
  • bench.js (router benchmark)
  • test.js (raw-TCP test client)