Ceriwis  

Go Back   Ceriwis > HOBI > Komputer & Teknologi > Programming

Programming Share, tanya jawab, saling bantu antar programmer dengan berbagai macam bahasa pemrograman.

Reply
 
Thread Tools
  #1  
Old 11th November 2011
Braincode's Avatar
Braincode Braincode is offline
Ceriwis Addicted
 
Join Date: Nov 2011
Posts: 4,638
Rep Power: 20
Braincode mempunyai hidup yang Normal
Default [Share]Making parallel webserver (posix comp)

Mau sharing soal ngebuat http webserver yg pake POSIX compatible functions, SignalHandler, Multiple Process. Di buat under unix system.



Webserver yg gw buat ini, klo user masukin alamatnya di url



dengan kata laen GET maka yg dikirim ke client adalah standard page.



di dalam websitenya, cuman 3 hal yg saya implementasi:

1. panggil hostname

2. liat interrupts yg di unix system biasanya di /proc/interrupts

3. jalankan ps unix command



index.html yg saya pakai


Code:



Parallel Webserver


Available functions and commands


On this server you can try some commands:




fungsi2x penting dan penjelasan

int fork();



fork() dipakai untuk membuat child process, jadi dari initial process bakalan jadi 2, father ama child. Child process itu full copi dari father process. fork() return 2x sekali ke father sekali ke child, child dapet nilai 0, father dapet pidnya child (pid = process id).



signal, apakah itu signal, signal itu merupakan pesan dari suatu process ke process lain, atau error dari process itu sendiri. bentuknya bisa interrupt, exception, errors. Gunanya untuk mengasih tau suatu process tentang hal yg terjadi di sekitar.



contohnya: ctrl+c itu, signalnya namanya SIGINT. dengan adanya signal ini maka process tau kalau user pengen nutup dia. dalam program ini signal yg saya pakai adalah SIGCHLD, yg bakalan di luncurkan ama child process ketika dia terminasi diri sendiri.



father process bisa menunggu child dengan memakai system calls waitpid(), kalau dipasang blocking fathernya tidak akan meneruskan processnya, dia bakalan menunggu sampai child selesai.



tapi dalam hal ini father process yg pertama tidak saya block, agar bisa menerima client yg laen, dengan kata laen servernya paralel.



PS command ini yg menarik, karena untuk melakukannya saya membuat child process dari child process.



jadi kayak gini

Father // accepting any connection

###|->Child1 // handle 1 connection

######|->Child1.1 // creating image with exec() to launch ps command



Child1.1 ini dipakai untuk membuat image process dengan system calls exec untuk menjalankan ps unix command.



hal penting dalam sini yakni, kita harus membelokkan STDOUT, seperti yg kita tau ketika sebuah process membaca/menulis sebuah data dalam bentuk apapun, bakalan dipasangin file descriptor, standardnya ada 3:

STDOUT, STDIN, STDERR.



for eg

Typ: FILE

Standard Handler:

Input: stdin

Output: stdout

Error: stderr



ini bisa diganti2x, printf() bisa di buat masukin ke sebuah file. dengan cara menganti standard outputnya dengan file descriptor (klo kita buka file pakai open() maka yg di return itu adalah file descriptor, jadi kita bisa ganti stdout dengan filedescriptor, dengan mengunakan system calls dup2())



Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off


 


All times are GMT +7. The time now is 11:20 AM.


no new posts