Multithreading

 .Dasar Teori

Konsep client-server merupakan dasar dari setiap transaksi yang terjadi pada setiap aplikasi jaringan. Socket merupakan antarmuka antara application process dan transport layer. Forking sebagai salah satu metode penanganan multiple request dari client yang sudah dipelajari sebelumnya memiliki kelemahan, yaitu: 

a. Performansi
b. Portability
c. Kompleksitas

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.

.Percobaan

Program 1
Server

Client

Output

Pada program diatas mengimport library threading dan socket kemudian pada program server terdapat fungsi handle client yang berguna untuk menerima satu pesan dan mengembalikan pesan ke client kemudian menutup socket, pada program client mengimport library socket kemudian terdapat program untuk menyambungkan socekt ke server dan ketika sudah tersambung akan keluar inputan msg yang akan dikirimkan ke server dan terdapat program menutup socket. Terdapat output yang jika server dan client 1 dan client 2 terhubung dan client 1 mengirimkan pesan ke server maka output akan ditampilkan di server dan client 1, dapat juga jika client 2 mengirimkan pesan ke server maka maka output akan ditampilkan di server dan client 2, output antar client tidak dikirimkan.


Program 2
Server

Client

Output
Pada program diatas mengimport library threading, socket, argparse dan os , pada program server terdapat class Server yang terdiri dari fungsi init untuk koneksi, fungsi run(self) untuk menghubungkan antara server dan client yang merupakan listening, kemudian jika terhubung maka server ready untuk menerima pesan dari client, selanjutnya ada fungsi remove_connection yang berguna untuk memutuskan koneksi antara client dan server, dan class ServerSocket yang terdiri dari fungsi init untuk koneksi, fungsi run yang dimana terdapat program broadcast self dan else untuk menutup connection , fungsi send untuk mengirimkan pesan sendall dengan menggunakan encode ascii, di luar class terdaapt fungsi exit yaitu untuk menutup semua koneksi jika input 'q'. Pada program client terdapat class Send terdapat fungsi init untuk penginisialisasi self,sock,name, fungsi run input message jika client mengetikkan message 'QUIT' maka client tersebut keluar dari program chat, jika tidak maka chat terus berlanjut. class Receive terdapat fungsi init untuk penginisialisasian self,sock,name. fungsi run mengeluarkan output pesan dengan format decode ascii dari self.name kemudian jika lost connection maka akan keluar output 'lost connection to the server' kemudian client akan keluar dari chat dan socket di tutup. Class client terdapat fungsi init berisi self,host,port yang berguna untuk koneksi socket. dan fungsi start yaitu untuk agar socket terkoneksi dan terhubung antara server dan client dan terdapat inputan nama bagi client yang sudah terhubung.Output yang akan keluar pada program ini adalah pertama server akan menunggu koneksi dari client, kemudian client 1 terhubung ke server lalu client diminta untuk menginputkan nama dari client dan client 1 bisa berkomunikasi dengan server dan chatroom, kemudian jika client 2 terhubung maka server akan terhubung dengan client 2 dan client 2 dapat berkomunikasi ke server dan chatroom yang berisi berbagai client.



Comments