Tugas 3 - Socket Programming

 Arsitektur Client Server

Server

Server adalah program yang berjalan pada remote mesin yang menyediakan layanan kepada client. Ketika program server dimulai, maka server membuka pintu untuk permintaan masuk dari klien, tetapi server tidak pernah memulai layanan sampai diminta untuk melakukannya. Program server adalah program tanpa batas. Ketika mulai, program server akan berjalan tanpa batas kecuali ada masalah. Program server menunggu permintaan masuk dari klien. Ketika suatu permintaan datang, ia menanggapi permintaan itu, baik secara iteratif atau bersamaan.

Client

Klien adalah program yang berjalan pada mesin lokal yang meminta layanan dari server. Program klien terbatas, yang artinya dimulai oleh pengguna (atau program aplikasi lain) dan berakhir ketika layanan selesai. Biasanya, klien membuka saluran komunikasi menggunakan alamat IP dari remote host dan alamat port dari program server spesifik yang berjalan pada mesin itu. Setelah saluran komunikasi dibuka, klien mengirim permintaannya dan menerima respons. Meskipun bagian permintaan-respons dapat diulang beberapa kali, keseluruhan prosesnya terbatas dan ada akhirnya (berakhir).

Concurrency

Concurrency di Client

Klien dapat dijalankan pada mesin baik secara iteratif atau bersamaan. Menjalankan klien secara iteratif berarti menjalankannya satu per satu; satu klien harus memulai, menjalankan, dan mengakhiri sebelum mesin dapat memulai klien lain. Namun, sebagian besar komputer saat ini memungkinkan klien secara bersamaan; yaitu, dua atau lebih klien dapat berjalan pada saat yang sama.

Concurrency di Server

Iterative Server hanya dapat memproses satu permintaan pada satu waktu; Server menerima permintaan, memprosesnya, dan mengirim respons ke klien yang merequest sebelum menangani permintaan lain.Concurrence Server, dapat memproses banyak permintaan pada saat yang sama dan dengan demikian dapat membagi waktu antara banyak permintaan.


Multitasking dan Concurrence Server

Pada Iterative Server, request dari client ditangani/dilayani secara sequential sesuai urutan
permintaan (FIFO) Klien harus menunggu semua permintaan sebelumnya dan agar permintaannya dilayani sebelum mendapatkan respons.
Permasalahan:
Permintaan singkat oleh klien mungkin harus menunggu permintaan yang lebih lama untuk
diselesaikan Server dapat diblokir pada I / O saat melayani permintaan 🡪 ini tidak efisien
Solusi
Menggunakan concurrence server:
• Multiplexing
• Forking
• Multithreading

FORKING

Merupakan cara tradisional untuk menghandle multiple clients Ketika sebuah aplikasi memanggil fork (), maka dibuat copyan dari calling program, sampai ke program counter(PC), dan child process baru dimulai dengan copyan tersebut. Hasil kembalian dari fork() : sekali dalam program pemanggil dan waktu berikutnya dalam child process. Nilai kembalian dalam program pemanggil adalah PID dari child process baru, sementara dalam child process itu adalah 0.

Keuntungan

Mudah diimplementasikan Menggunakan proses per klien menjaga apar tidak ada satu klien pun memonopoli server, karena kernel Linux akan menukar proses masuk dan keluar secara preemptif Apabila terjadi crash pada salah satu child process, maka hal tersebut tidak akan mempengaruhi child process yang lain, karena kernel akan mencegah sebuah proses merusak memory dari proses lain.

Kekurangan

Kurangnya shared memori Untuk program yang besar, sumber daya yang digunakan akan significant karena adanya proses copy untuk setiap anak sehingga mengakibatkan kinerja lambat dan potensi kehabisan sumber daya.

Multithreading

Thread adalah proses ringan yang berbagi ruang memori utama dari proses induk. Karena itu, mereka menggunakan sumber daya yang lebih sedikit daripada aplikasi multiproses, dan waktu context-switch yang lebih cepat. Salah satu solusi untuk permasalahan diatas adalah penggunaan thread. Thread berjalan secara paralel dan menggunakan shared memory global. Karena semua thread berjalan dalam proses dan ruang memori yang sama, secara otomatis thread berbagi soket yang lewat di antara mereka. Hal ini serupa dengan cara child process mewarisi deskriptor soket. Namun, tidak seperti proses, thread biasanya lebih murah untuk memulai, dan bekerja pada mesin Unix dan Windows di bawah standar Python.

Program Forking

Server
Client
Output

Program Multithreading

Server

Client

Output

Comments