Socket Programming UDP Echo Client Server (Python)
RPC DAN PROTOKOL KOMUNIKASINYA
1. Remote Procedure Call (RPC)
Remote Procedure Call (RPC) adalahsebuahmetode yang
memungkinkankitauntukmengaksessebuahprosedur yang berada di komputer lain.
Untukdapatmelakukaninisebuah serverharusmenyediakanlayanan remote
procedure.Pendekatan yang dilakuanadalahsebuah server membuka socket, lalumenunggu
client yang memintaprosedur yang disediakanoleh server. Bila client
tidaktahuharuSmenghubungi port yang mana, client bisa me-request kepadasebuah
matchmaker padasebuah RPC port yang tetap. Matchmaker akanmemberikan portapa yang
digunakanolehprosedur yang diminta client.
RPC masihmenggunakancaraprimitifdalampemrograman, yaitumenggunakanparadigma
procedural programming. Hal itumembuatkitasulitketikamenyediakanbanyak remote
procedure. RPC menggunakan socketuntukberkomunikasidengan proses lainnya.
Padasistemseperti SUN, RPC secara default sudahter-install kedalamsistemnya, biasanyaRPC
inidigunakanuntukadministrasisistem. Sehinggaseorang administrator
jaringandapatmengaksessistemnyadanmengelolasistemnyadarimanasaja,
selamasistemnyaterhubungkejaringan.
Kelebihan RPC
Relatifmudahdigunakan :
Pemanggilan remote procedure tidakjauhberbedadibandingkanpemanggilan procedure.
Sehinggapemrogramdapatberkonsentrasipada software logic, tidakperlumemikirkanlow level
details seperti socket, marshalling &unmarshalling.
Robust (Sempurna):
Sejakth 1980-an RPC telahbanyakdigunakandlmpengembangan mission- critical application
ygmemerlukanscalability, fault tolerance, & reliability.
Kekurangan RPC
ƒ Tidakfleksibelterhadapperubahan:
Static relationship between client & server at run-time.
Berdasarkanprosedural/structured programming yang sudahketinggalanjamandibandingkan
OOP.
StrukturProtokol Message RPC
Call Message
Dilakukanolehklien, dimanameminta server untukmengeksekusisuatuprosedur.
Terdapatnilai-nilai unsigned integer yang digunakanuntukmengidentifikasiprosedurremote yang
diminta:
1. Nomor Program
2. NomorVersidari Program
3. NomorProsedur
2. Reply Message
Dikirimkanoleh server jaringan, bervariasitergantungapakah call messages yang
dimintaklienditerimaatauditolak. Mengandunginformasi:
1. RPM mengeksekusi call message dengansukses
2. Implementasi remote tidaksesuaidenganprotokol yang digunakan (versi yang
lebihtinggiataulebihrendahditolak)
3.Program remote tidaktersediapadasistem remote
4. Program remote tidakmendukungversi yang dimintaklien
5. Nomorprosedur yang dimintatidakada
Fiturdalam RPC
1. Batching Calls
Mengijinkanklienuntukmengirim message calls ke server dalamjumlahbesarsecaraberurutan.
2. Broadcasting Calls
Menijinkanklienuntukmengirimkanpaket data kejaringandanmenunggubalasandari network.
3. Callback Procedures
Mengijinkan server untukbertindaksebagaikliendanmelakukan PRC callback ke proses yang
dijalankanklien.
4. Select Subrutin
Memeriksadeskripsisuatu file dan messages
dalamantrianuntukmelihatapakahsiapdibacaatauditulis,atauditahan. (mengijinkan server
untukmenginterupsisuatuaktivitas.
PrinsipRPC dalam program Client-Server
Skema RPC inidilakukanjugapada proses-proses yang running di komputerberlainan
ƒSebelummekanisme RPC digunakan, data harus di-packaging kedalamformattransimisi.
Langkahinidinamakan marshalling
ƒProxybertanggungjawabuntuk marshalling data, kemudianmengirimkan data
danmemintainstansdarikomponen (remote)
ƒStubmenerima request, unmarshall data, danmemanggil method yang diminta. Kemudian
proses mengembalikannilai yang diinginkan .
Langkah-langkahdalam RPC
1. Prosedur client memanggil client stub
2. Client stub membuatpesandanmemanggil OS client
3. OS client mengirimpesanke OS server
4. OS server memberikanpesanke server stub
5. Server stub meng-unpack parameter-parameter untukmemanggil server
6. Server mengerjakanoperasi, danmengembalikanhasilnyake server stub
7. Server stub mem-pack hasiltsbdanmemanggil OS server
8. OS server mengirimpesan (hasil) ke OS client
9. OS client memberikanpesantersebutke client stub
10. Client stub meng-unpack hasildanmengembalikanhasiltersebutke
client
Fiturdalam RPC
3. Batching Calls:Fitur Batching calls mengijinkanklienuntukmengirim message calls ke server
dalamjumlahbesarsecara sequence ( berurutan )
Broadcasting Call:Fitur Broadcasting mengijinkanklienuntukmengirimkanpaket data
kejaringandanmenunggubalasandari network. FIturinimenggunakanprotokol yang
berbasiskanpaketdata seperti UDP/IP sebagaimediumnya.Broadcast RPC membutuhkanlayanan
port mapper RPC untukmengimplementasikanfungsinyA
Callback ProcedureS:Fitur Callback Procedures mengijinkan server untukbertindaksebagai
Menggunakan select SubrutiN:Fituriniakanmemeriksadeskripsidarisuatu file dan messages
dalamantrianuntukmelihatapakahmerekasiapuntukdibaca (diterima) atauditulis (dikirim),
ataumerekadalamkondisiditahansementara. Prosedurinimengijinkan server
untukmenginterupsisuatuaktivitas, memeriksadatanya, dankemudianmelanjutkan proses
aktivitastersebut.
Object Remote
Meskipunteknologi RPC inirelatifsudahmemberikankenyamananbagi developer,
tapiperkembangan yang terjadi di
bidangpemrogramanberorientasiobjekakhirnyamenuntutkehadiranteknologibaru.
Sederetteknologiakhirnyabenar-benarmuncul, antaralain;RMI (Remote Method
Invocation),CORBA(Common Object Request Broker Architecture), dan SOAP (Simple Object
Access Protocol).
Contoh Source Code Sederhana Program RPC
Menggunakan Array asosiatif Dalam Parameter Request.
Jika Anda ingin menggunakan array asosiatif dalam parameter metode Anda, Anda
akanperlu menggunakan struct datatype:
4. Simple Object Access Protocol (SOAP)
SOAP adalahsingkatandari Simple Object Access Protocol,
merupakansebuahprotokolkomunikasi client server yang mengirimdanmenerimainformasi "di
atas HTTP". Data yang dikirimdanditerimadalam format XML. SOAP
hampirsamadenganprotokol XMLRP, hanyasaja SOAP lebihcocokdigunakanuntuk data kompleks
yang dikirimantar client-server.
Secarakonseptual SOAP dapatdianggapsebagai DCOM versi XML. SOAP merupakanmekanisme
lain yang memungkinkanpenggunaan remote procedure call. SOAP bersifatnetral platform,
netralbahasadantidakbergantungpadasuatuobjek model. Sehingga SOAP-enabled distributed
application dapatmenjangkauberagam operating sistem, dimanaterdiridariobjek yang
berasaldari vendor yang berbeda, ditulispadabahasa yang berbeda, dandidasarkanpadaobjek
model yang berbeda.
SOAP menjadisangatmudahditerimaolehberbagaipihak – terutamaolehberbagai vendor TI –
dikarenakanprotokolinimemanfaatkanberbagaiteknologi yang
sudahadasebelumnyadansudahbanyakdigunakan. Misalnyauntukprotokol transport, yang
paling banyakdigunakanadalah HTTP, walaupundimungkinkanuntukmenggunakanprotokol
transport lainnya. Sedangkanuntuk format data atau message digunakan XML yang
tidakdiragukanlagimanfaatdanperannya di dalampertukaran data. Dengandemikian,
tidaklahterlalumengherankanbilakemudian SOAP
dianggapsebagaisolusipenyelamatuntukmengatasiberbagaimasalah yang dihadapiolehteknologi
– teknologipendahulunya.
Pesan SOAP berbentuksepertisebuah envelope yang berisi
header (optional) dan body (required). Header
berisiblokinformasi yang
berhubungandenganbagaimanapesantersebutdiproses.
Hal inimeliputipe-routingandan delivery setting,
authentication atau authorization assertions, and
transaction contexts. Body berisipesansebenarnya yang
dikirimdandiproses. Semua yang
dapatditampilkandengansintaks XML
dapatdimasukkandalampesan body.
Setiapelemen Envelope harusberisitepatsatuelemen Body.
Elemen Body dapatberisisebanyakmungkin child nodes
yang diperlukan. Isi darielemen Body adalahpesan. Elemen Body
ditentukandalamsuatucaradimanadapatberisi valid danwellformed XML yang
telahdibatasiolehsuatu namespace (qualified).
Jikasebuah Envelope berisielemen Header, harusberisitidaklebihdarisatu, danharustampakpada
first child dari Envelope, sebelumelemen Body. Header dapatberisi valid, well-formed,
dandibatasidengan namespace XML dimanahendakdimasukkanolehpenciptapesan SOAP.
Setiapelemen yang beradadalam Header disebutblok header. Tujuandariblok header
adalahuntukmemberitahukaninfomasi yang berhubungandengan pemrosesanpesan SOAP.
5. Berikutgambarposisi SOAP dalamaplikasidancontohstrukturpesanSOAP :
SOAP Anatomi Call
Contohstrukturpesan SOAP
Aturan SOAP
Ada beberapaaturan yang diberlakukanpada SOAP, yakni :
- SOAP Envelope menggunakan namespace
- Default namespace untuk SOAP encoding dan data types
- SOAP’s Syntax Rules :
- SOAP harusdibuatdenganmenggunakansintaks XML
- SOAP harusmenggunakan SOAP Envelope namespace
- SOAP harusmenggunakan SOAP Encoding namespace
- SOAP tidakbolehmengandung XML Processing Instruction
Kelebihan&Kekurangan SOAP
Adapunkelebihan SOAP dapatdiuraikansebagaiberikut :
- Menggunakan HTTP yang telahdigunakansecaraluas
- Bersifatfleksibel, mudahdikembangkan, karenaberbasis XML
- Data in string message
Selainkelebihan, SOAP jugamemilikibeberapakekurangan, diantaranya :
- Parsing paket SOAP danpemetaannyakeobyekmengurangikinerja
- Tidakdapatmenerapkankeamanankhusus, karenamerupakan “wire protocol” yang
bergantungpada HTTP
6. Pemrograman SOAP Client-Server
Dalammembangunsebuahsistemaplikasiberbasis web service,
dibutuhkanduakomponenutamayaitu, server sebagai provider entity dan client sebagai
requester entity .Sebagaicontoh, di bawahiniterdapatdua listing program padasisi server dansisi
client.
Contoh Program sederhana menggunakan SOAP
Database Engine yang kita pakai adalah MySQL. Struktur Database/Table : Database Name = mhs_webserv, Table
Name = mahasiswa;
a. Buat Database “mhs_webserv”
create database mhs_webserv;
b. Buat Tabel “mahasiswa” :
CREATE TABLE IF NOT EXISTS `mahasiswa` (
`nim` varchar(10) NOT NULL,
`nama` varchar(50) NOT NULL,
`alamat` text NOT NULL,
PRIMARY KEY (`nim`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
c. Isi data mahasiswa.
INSERT INTO `mahasiswa` (`nim`, `nama`, `alamat`) VALUES
('001', 'Kabul', 'Pekalongan'),
('002', 'Ridwan', 'Semarang');
3. Rancangan Script untuk Server (server.php)
<?php
//panggil file soap
require_once '../../nusoap/nusoap.php';
$ws_srv = new soap_server();
$ws_srv->register(ambilData);
function tes($param){
$nama= $param['nama'];
$alamat = $param['alamat'];
$return_value[] =array('nama'=>$nama,'alamat'=>$alamat);
return ($return_value);}
function ambilData(){
mysql_connect('127.0.0.1','root','');
mysql_select_db('coba_wservice');
$sql = mysql_query('SELECT * FROM mahasiswa WHERE 1');
$return_data_count=mysql_num_rows($sql);
//$return_data[]=array();
while ($row=mysql_fetch_array($sql)){
$return_data[]=array('nim'=>$row['nim'],'nama'=>$row['nama'],
'alamat'=>$row['alamat']);
}
$return['count']=$return_data_count;
$return['data']=$return_data;
return $return;
}
$HTTP_RAW_POST_DATA = isset ($HTTP_RAW_POST_DATA) ?
$HTTP_RAW_POST_DATA:"";
$ws_srv->service($HTTP_RAW_POST_DATA);
?>
7. 4. Rancangan Script untuk Client. (client.php)
<?php
require_once('../../nusoap/nusoap.php');
$client = new soapclient('http://127.0.0.1/mhs_webserv/server/');
//$param = array('nama'=>'Kabul Kurniawan','alamat'=>'Pekalongan');
$result = $client->call('ambilData');
$n=$result['count'];
$data=$result['data'];
echo '<table border=1>';
echo "<tr><th>Nim</th><th>Nama</th><th>Alamat</th></tr>";
for($i=0;$i<$n;$i++){
echo "<tr><td>".$data[$i]['nim']."</td><td>".$data[$i]['nama'].
"</td><td>".$data[$i]['alamat']."</td></tr>";
}
echo "</table>";
print_r ($result['count']);
echo'<br>';
print_r ($result['data']);
?>
Setelah rancangan-rancangan tersebut dibuat, kita dapat langsung mengakses data mahasiswa melalui client.php,
berikut hasilnya.. :)
Untuk sekedar mencoba-coba, Anda juga bisa menjalankan script client.php di atas dengan
memanfaatkan NuSOAP webservice yang sudah saya sediakan di rosihanari.net, yaitu Anda
cukup mengubah.
dalam script client.php menjadi
kemudian jalankan client.php di komputer Anda sendiri, dan tidak perlu membuat script
server.php.
8. Representational State Transfer (REST)
REST adalah salah satu jenis web service yang menerapkan konsep perpindahan antar state.
State disini dapat digambarkan seperti jika browser meminta suatu halaman web, maka
serverakan mengirimkan state halaman web yang sekarang ke browser. Bernavigasi melalui
link-link yang disediakan sama halnya dengan mengganti state dari halaman web. Begitu pula
REST bekerja, dengan bernavigasi melalui link-link HTTP untuk melakukan aktivitas tertentu,
seakan-akan terjadi perpindahan state satu sama lain. Perintah HTTP yang bias digunakan
adalah fungsi GET, POST, PUT atau DELETE. Balasan yang dikirimkan adalah dalam bentuk XML
sederhana tanpa ada protokol pemaketan data, sehingga informasi yang diterima lebih mudah
dibaca dan diparsing disisi client. Dalam pengaplikasiannya, REST lebih banyak digunakan untuk
web serviceyang berorientasi pada resource. Maksud orientasi pada resource adalah orientasi
yang menyediakan resource-resource sebagai layanannya dan bukankumpulan-kumpulan dari
aktifitas yang mengolah resource itu.Alasan mengapa REST tidak digunakan dalam skripsi ini
karena orientasi pada resourcenya itu, sedangkan aplikasi event calendar membutuhkan
pemanggilan metode yang bisa dikerjakan terhadap kumpulan resource event. Selain itu,
karena standarnya yang kurang sehingga tidak begitu cocok diterapkan dalam aplikasi yang
membutuhkan kerjasama antar aplikasi lain, dimana standar yang baik akan sangat berguna
karena berbicara dalam satu bahasa yang sama. Beberapa contoh web service yang
menggunakan REST adalah: Flickr API(Application ProgramInterface), YouTube