Membuat RPC Server dan Client dengan Ruby

Apa itu RPC?, bagi yang belum tahu RPC adalah Remote Procedure Call dimana kita bisa memanggil fungsi yang ada diserver. Mungkin bisa saya ambil contoh pada Windows yang banyak menggunakan RPC untuk berkomunikasi secara lokal maupun melalui jaringan. Google juga menggunakan RPC dengan pemaketan data menggunakan protobuf. RPC juga dapat digunakan untuk berkomunikasi antar sever sehingga perubahan konfig dapat dengan cepat diperbarui.

Keuntungan menggunakan RPC adalah mendukung client yang berbeda beda bahasa misalnya RPC yang dibangun dengan Java dapat melayani client yang menggunakan bahasa PHP, Ruby, Go dll.

Nah kali ini saya ingin sedikit berbagi tips bagaimana membuat server rpc dan clientnya menggunakan bahasa Ruby. Langsung saja cek kode berikut ini:

# rpc_server.rb
require 'xmlrpc/server'
s = XMLRPC::Server.new(8888)
s.add_handler('add') do |x, y|
x + y
end
s.serve

Cukup singkat dibandingkan dengan bahasa lain, Mari kita bahas dengan seksama, baris 1 memuat pustaka xmlrpc/server yang berguna untuk pembuatan server. Baris 3 kita membuat instance server rpc baru dengan parameter port yang disimpan dengan nama variabel “s”, port 8888 ini nantinya digunakan untuk koneksi oleh client.

Kemudian baris 4–6 menambahkan fungsi pada server rpc yang bisa diakses oleh client, dalam kasus ini kita menambahkan fungsi “add” dengan 2 buah parameter yaitu x dan y. Dan fungsi ini memberikan hasil x ditambah y, pada Ruby keyword “return” tidak wajib digunakan sehingga baris x+y sudah mengembalikan hasilnya ke fungsi. Baris 7 kita menjalankan server rpc dan mengizinkan client untuk mengaksesnya.

Untuk sisi kliennya agak sedikit panjang, berikut listing kodenya:

# rpc_client.rb
require 'xmlrpc/client'
server = XMLRPC::Client.new('localhost', '/', 8888)
begin
result = server.call('add', 10, 20)
puts result
rescue XMLRPC::FaultException => e
puts e.faultCode
puts e.faultString
end

Seperti pada umumnya baris 1 kita mengimport pustaka xmlrpc/client untuk membuat klien. Disini saya menggunakan begin.. rescue untuk menangkap kesalahan jika kode pada baris 4–11 gagal dieksekusi. Kita membuat client dengan perintah XMLRPC::Client.new dengan parameter nama host, nama path dan port rpc server. Kemudian pada baris 5 kita mulai memanggil fungsi “add” dengan meyertakan 2 parameter yaitu angka 10 dan 20, baris ke 6 kita mencetak kembalian dari server.

Lajut baris 8 menangkap kesalahan dengan memasukkan ke variabel “e”. baris selanjutnya (9–10) mencetak kesalahan yang didapat.

Mudah bukan, Ruby memang bahasa yang dibuat agar programmer merasa senang saat mengembangkan aplikasi.

Jalankan kode server dengan mengetikan perintah ini pada console:

$ ruby rpc_server.rb
menjalankan server rpc

Dan untuk menjalankan kliennya ketikan perintah berikut ini:

$ ruby rpc_client.rb
30

Nah bagaimana jika kita ingin membuat kelas lalu mendaftarkannya ke service rpc. Kita memodifikasi script server diatas dengan menambahkan kelas misalnya MathObject.

# rpc_server.rb
require 'xmlrpc/server'
s = XMLRPC::Server.new(8888)
class MathObject
def add(x, y)
x + y
end
end
s.add_handler(‘Math’, MathObject.new)
s.serve

Perubahan kode diatas hanya pada penambahan kelas MathObject dan pada add_handler dimana yang sebelumnya hanya menggunakan 1 parameter diubah menjadi 2 parameter. Parameter 1 berupa nama kelas, nama kelas ini yang nantinya akan bisa diakses oleh klien. Kemudian parameter ke 2 berupa instance dari kelas yang sudah kita buat.

Kita juga sedikit merubah kode pada klien, ubah pada server.call(‘add’) menjadi server.call(‘Math.add’).

# rpc_client.rb
require 'xmlrpc/client'
server = XMLRPC::Client.new('localhost', '/', 8888)
begin
result = server.call('Math.add', 10, 20)
puts result
rescue XMLRPC::FaultException => e
puts e.faultCode
puts e.faultString
end

Output dari eksekusi kode diatas hasilnya tetep sama jika kita jalankan. Keuntungan dari menggunakan kelas adalah kode menjadi lebih rapi dan apabila aplikasinya berkembang menjadi lebih komplek maka akan lebih mudah dalam mengelolanya.

Oke sekian dulu, jika kamu ada komentar tentang tulisan ini atau tentang kodenya jangan sungkan-sungkan untuk merespon :)

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.