Go র সার্ভারে আসলে কি ঘটে?
July 3, 2025Mostafejur Rahman
#golang#http#tcp#net/http

Go র সার্ভারে আসলে কি ঘটে?

ধরেন আপনি go তে একটা সার্ভার বানাইলেন, খুবি সিম্পল একটা।

pacakge main import ( "log" "fmt" "net/http" ) func aboutHandler(w http.ResponseWriter, r *http.Request){ fmt.Fprintf(w, "Some random text") } func main(){ http.HandleFunc("/about", aboutHandler) log.Println("Starting server on :8080") log.Fatal(http.ListenAndServe(":8080", nil)) }

কি কাহিনী ঘটছে এইখানে? আপনি ব্রাউসার এ হিট করলেন http://localhost:8080/about, আর আপনাকে সার্ভার some random text টা সেন্ড করলো। কিভাবে?

ধরেন আপনি ক্লায়েন্ট , ব্রাউসার এ গিয়ে কিছু লিখলেন , সেটা সার্ভার এ যাবে, আপনার রাউটার থেকে সার্ভার এর রাউটার অবধি নেটওয়ার্কিং এর মাদ্ধমে, রাউটার তখন এইটারে সার্ভার এর NIC তে পাঠায় । NIC এইটারে নিয়ে ওর রিসিভ buffer এ রাখে। আর os রে ইনফর্ম করে।

সার্ভার এর তো আপনার সাথে কানেক্ট হইতে হইবে, সার্ভার কিভাবে হবে ? উত্তর হইলো socket ক্রিটে এর মাদ্ধমে। সার্ভার একটা সকেট বানাইবে , ক্লায়েন্ট এর সাথে connect হবার জন্য । TCP/IP , সার্ভার এই কাননেশন এর কাহিনী ঘটানোর জন্য কিছু কাজ করে ,

http.ListenAndServe(":8080", nil)

এই লাইন তলে তোলে একটা tcp এর জন্য os এর কাছে রিকোয়েস্ট করে ,

net.Listen("tcp", ":8080")

OS গিয়া go এর runtime রে বলে যে দেখো, তোমার জন্য কিছু ডাটা আসছে। এখন ওই যে go এর Listen, Accept করার জন্য কাজে লেগে পরে , রিকোয়েস্ট আসবে , আর সে accept করবে , না আসা অবধি ঘুমায়।

go এর runtime তখন বলে , কোন goroutine এই data চাইসে ? goruntime তখন ওই accept রে ঘুম থেইকা উঠায় । সে ডাটা read করে, নতুন goroutine বানায় , আর ওই নতুন goroutine ডাটা হ্যান্ডেল করে। এখন সার্ভার রাউটিং টেবিল এ খুঁজতে থাকে যে কোন route আমারে এই data এর জন্য বলছে?

mux বা router তখন সেই রাউটার বাইর করে।

data তখন সকেট এর write buffer এ যায়। socket তখন kernel কে বলে boss data পাইছি । kernel NIC রে বলে এই নেও , যে খান দিয়া আইছে , ঐখানে পাঠাও । NIC তখন রাউটার এর মাদ্ধমে আমাদের কাছে ডাটা সেন্ড করে .

📌 TL;DR

Client → Router → NIC → NIC RX buffer → Kernel interrupt → socket receive buffer → FD readable → goroutine wake → handler execute → response write → socket send buffer → kernel → NIC TX buffer → Router → Client

NIC, Kernel, Goroutine, Poller, Socket, সব মিলে এক জাদুর কাহিনী।