Sebenarnya saya sedang belajar Jaringan Komputer dan saat itu, saya bingung bagaimana server web memelihara banyak koneksi?
Secara sederhana, saya belajar melalui beberapa googling adalah bahwa soket menangani setiap permintaan klien.
Jadi katakanlah ada server web dan katakanlah 2 klien dengan IP
Client A: 5.5.5.5
Client B: 10.10.10.10
Keduanya mencoba terhubung ke server di port 80.
Sekarang, dari googling apa yang saya dapatkan adalah, server mendengarkan di port 80 untuk permintaan yang masuk. Kemudian katakanlah klien A mencoba terhubung ke server (melakukan koneksi TCP / IP). Selama soket dibuat di antara keduanya. Kemudian dieksekusi sebagai utas terpisah untuk komunikasi selanjutnya yang membuat server kembali mendengarkan permintaan klien lain di port tertentu. Dan Klien B menghubungkan dengan cara yang sama.
Sekarang pertanyaan pertama saya adalah:
1. How does server communicate with these two clients simultaneously
after the connection has been established?
Sekarang praktis tidak hanya 2 klien tetapi ribuan dan jutaan pengguna dapat terhubung ke server.
Maka pertanyaan saya selanjutnya adalah:
2. Now, how do those thousands of clients get connected to a single server?
If we assume every client is connected to the server through wire, it is not
practically possible to maintain that many sockets on a hardware for
connection. How those thousands connections are made and handled?
Terakhir, pertanyaan ketiga saya adalah:
3. Above I said (actually heard) how **client A** connected to the the server
and similarly the client B.
But I didn't get the part stating "after a TCP/IP connection is made they
continue separately in a separate socket and making server to listen for
other client requests." What does that mean? If one client is communicating
to the server, how come other can communicate at the same time to same server.
Isn't it like while a student is asking question to a teacher, other can't
ask at the same time since that particular student is busy or occupying the
teacher at the moment so others should wait, which we compare than client B
should wait when client A is communicating.
Ini adalah pertanyaan dasar saya yang tidak saya dapatkan. Harap perbaiki saya jika saya salah mengerti. Anda dapat menyarankan saya beberapa buku / pdf untuk dibaca jika jawabannya terperinci atau tidak sebagian terfokus pada bagian tertentu. Terima kasih
Jawaban:
Memang, lebih khusus lagi ada jenis soket khusus yang disebut soket "mendengarkan".
Biasanya soket dikaitkan dengan kombinasi IP lokal, port lokal, IP jarak jauh dan port jarak jauh.
Soket mendengarkan berbeda. Ini tidak terkait dengan IP dan port jarak jauh tertentu. Itu terkait dengan port lokal tertentu. Ini mungkin atau mungkin tidak terkait dengan IP lokal tertentu.
Biasanya server web Anda akan memiliki soket mendengarkan dengan port lokal 80
Sepasang soket sebenarnya satu di klien, satu di server.
Aplikasi klien membuat soket dan meminta OS klien untuk menghubungkannya ke server.
OS klien mengalokasikan port lokal acak, memilih IP lokal (biasanya berdasarkan pada interface mana paket akan dikirim) dan mengisi IP jarak jauh dan port yang diminta oleh aplikasi klien. Kemudian mulai proses menghubungkan ke server.
OS server memberi tahu pemegang soket pendengaran bahwa ada koneksi baru. Aplikasi server menerima koneksi dan soket baru dibuat untuk menanganinya.
Beberapa utas atau bahkan proses dapat memantau soket cantuman yang sama. OS akan memastikan bahwa salah satu dari mereka dapat menerima koneksi yang diberikan.
Itu terserah pelaksana aplikasi server. Mereka dapat memilih untuk menggunakan beberapa utas atau mereka dapat memilih untuk menggunakan API seperti "pilih" atau "jajak pendapat" yang memungkinkan satu utas untuk memantau beberapa soket untuk aktivitas.
OS server akan mencocokkan paket dengan soket dengan kombinasi IP sumber, port sumber, IP tujuan, dan port tujuan dan mengirimkannya ke soket yang sesuai.
"Socket" dalam konteks ini tidak merujuk ke soket fisik, hanya pada struktur data dalam sistem operasi.
Masih ada batasan, ribuan dapat dilakukan dengan mudah di server modern, jutaan menjadi sulit.
Komputer jauh lebih baik dalam membagi perhatian mereka daripada orang lain. Jelas jika server hanya memiliki satu inti prosesor, itu hanya dapat melakukan satu hal pada satu waktu tetapi jika itu dapat beralih di antara berbagai hal dengan cukup cepat, klien tidak akan menyadari hal itu.
Dan tentu saja banyak server saat ini memang memiliki beberapa inti prosesor.
Tampaknya masalahnya adalah bahwa rfc berbeda dari praktik sebenarnya dalam definisi soketnya.
Saya baru saja pergi dan mencari dokumentasi untuk "menerima" untuk tiga sistem operasi utama, semuanya berbicara tentang menerima membuat soket baru.
http://man7.org/linux/man-pages/man2/accept.2.html
https://www.freebsd.org/cgi/man.cgi?query=accept&sektion=2
https://msdn.microsoft.com/en-us/library/windows/desktop/ms737526%28v=vs.85%29.aspx
sumber