2. Konsep Dasar Sistem Operasi
3.4. Hubungan Antara Proses dan Client / Server
3.4.2. Socket Client / Server System
Dengan makin berkembangnya teknologi jaringan komputer, sekarang ini ada kecenderungan sebuah sistem yang bekerja sama menggunakan jaringan. Dalam topik ini akan kita bahas beberapa metoda komunikasi antar proses yang melibatkan jaringan komputer.
Socketadalah sebuahendpointuntuk komunikasi didalam jaringan. Sepasang proses atauthreadberkomunikasi dengan membangun sepasang socket, yang masing-masing proses memilikinya. Socket dibuat dengan
menyambungkan dua buah alamat IP melalui port tertentu. Secara umum socket digunakan dalamclient/server system, dimana sebuah server akan menunggu client pada port tertentu. Begitu ada client yang mengkontak server maka server akan menyetujui komunikasi dengan client melalui socket yang dibangun.
Server
dan
Thread
Pada umumnya sebuah server melayani client secara konkuren, oleh sebab itu dibutuhkanthreadyang
masing-masingthreadmelayani clientnya masing-masing. Jadi server akan membentukthreadbaru begitu ada koneksi dari client yang diterima (accept).
Server menggunakanthreadapabila client melakukan koneksi, sehingga server memiliki tingkat reabilitas yang tinggi. Pada sistem yang memiliki banyak pemakai sekaligusthreadmutlak dibutuhkan, karena setiap pemakai sistem pasti menginginkan respon yang baik dari server.
Java Socket
Javamenyediakan dua buah tipe socket yang berbeda dan sebuah socket spesial. Semua soket ini tersedia dalam paket jaringan, yang merupakan paket standar java. Berikut ini soket yang disediakan oleh java:
• Connection-Oriented (TCP) socket, yang diimplementasikan pada kelasjava.net.Socket
• Dan yang terakhir adalahjava.net.MulticastSocket, yang merupakan perluasan (extended) dari Socket UDP. Tipe socket ini memiliki kemampuan untuk mengirim pesan kebanyak client sekaligus (Multicast), sehingga baik digunakan pada sistem yang memiliki jenis layanan yang sama.
Gambar 3-17.WebServer ...
public WebServer(int port, String docRoot) throws IOException {
this.docRoot = new File(docRoot);
if(!this.docRoot.isDirectory()) {
throw new IOException(docRoot + " bukan direktori."); }
System.out.println("Menghidupkan Web server "); System.out.println("port: " + port);
System.out.println("docRoot: " + docRoot); try
{
serverSocket = new ServerSocket(port); }
catch(IOException ioe) {
System.out.println("Port sudah digunakan"); System.exit(1);
} }
public void run() {
while(true) {
try{
System.out.println("Menanti connection ... "); Socket socket = serverSocket.accept();
String alamatClient = socket.getInetAddress().getHostAddress(); System.out.println("Menangkap connection dari " + alamatClient); InputStream inputStream = socket.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); OutputStream outputStream = socket.getOutputStream();
...
Potongan kode diatas memperlihatkan teknik yang digunakan oleh java untuk membuka socket (pada kasus ini server socket). Selanjutnya server dapat berkomunikasi dengan clientnya menggunakan InputStream untuk menerima pesan dan OutputStream untuk mengirim pesan.
Remote Procedure Call
Remote Procedure Call(RPC) adalah sebuah metoda yang memungkinkan kita untuk mengakses sebuah prosedur yang berada di komputer lain. Untuk dapat melakukan ini sebuah komputer (server) harus menyediakan
layanan remote prosedur. Pendekatan yang dilakuan adalah, sebuah server membuka socket, menunggu client yang meminta proseduryang disediakan oleh server.
RPC masih menggunakan cara primitive dalam pemrograman, yaitu menggunakan paradigma procedural programming. Hal itu membuat kita sulit ketika menyediakan banyak remote procedure.
RPC menggunakan soket untuk berkomunikasi dengan proses lainnya. Pada sistem seperti SUN, RPC secara default sudah terinstall kedalam sistemnya, biasanya RPC ini digunakan untuk administrasi sistem. Sehingga seorang administrator jaringan dapat mengakses sistemnya dan mengelola sistemnya dari mana saja, selama sistemnya terhubung ke jaringan.
Pembuatan Objek
Remote
Pendekatan kedua yang akan kita bahas adalahRemote Method Invocation(RMI), sebuah teknik pemanggilan method remote yang lebih secara umum lebih baik daripada RPC. RMI menggunakan paradigma pemrograman berorientasi objek (OOP). Dengan RMI memungkinkan kita untuk mengirim objek sebagai parameter dari
remote method. Dengan dibolehkannya program java memanggil method pada remote objek, RMI membuat pengguna dapat mengembangkan aplikasi java yang terdistribusi pada jaringan
Untuk membuat remote method dapat diakses RMI mengimplementasikanremote objectmenggukan stub dan skleton. Stub bertindak sebagai proxy disisi client, yaitu yang menghubungkan client dengan skleton yang berada disisi server. Stub yang ada disisi client bertanggung jawab untuk membungkus nama method yang akan diakses, dan parameternya, hal ini biasa dikenal dengan marshalling. Stub mengirim paket yang sudah dibungkus ini ke server dan akan di buka (unmarshalling) oleh skleton. Skleton akan menerima hasil keluaran yang telah diproses oleh method yang dituju, lalu akan kembali dibungkus (marshal) dan dikirim kembali ke client yang akan diterima oleh stub dan kembali dibuka paketnya (unmarshall).
Untuk membuat remote objek kita harus mendefinisikan semua method yang akan kita sediakan pada jaringan, setelah itu dapat digunakan RMI compiler untuk membuat stub dan skleton. Setelah itu kita harus mem-binding remote objek yang kita sediakan kedalam sebuah RMI registry. Setelah itu client dapat mengakses semua remote method yang telah kita sediakan menggunkan stub yang telah dicompile menggunakan RMI compiler terebut.
Akses ke Objek
Remote
Sekali objek didaftarkan ke server, client dapat mengakses remote object dengan menjalankanNaming.lookup()
method. RMI menyediakan url untuk pengaksesan ke remote objek yaiturmi://host/objek, dimana host adalah nama server tempat kita mendaftarkan remote objek dan objek adalah parameter yang kita gunakan ketika kita memanggil methodNaming.rebind(). Client juga harus menginstall RMISecurityManager untuk memastikan keamanan client ketika membuka soket kejaringan.
Java memiliki sistem security yang baik sehingga user dapat lebih nyaman dalam melakukan komunikasi pada jaringan. Selain itu java sudah mendukung pemorograman berorientasi object, sehingga pengembangan software berskala besar sangat dimungkinkan dilakukan oleh java. RMI sendiri merupakan sistem terdistribusi yang dirancang oleh SUN pada platfrom yang spesifik yaitu Java, apabila anda tertarik untuk mengembangkan sistem terdistribusi yang lebih portable dapat digunakan CORBA sebagai solusi alternatifnya.