Home > Jaringan Komputer, Pemrograman Java, Sistem Terdistribusi > Server Multi-thread di Java (2)

Server Multi-thread di Java (2)


Bagian ini menjelaskan multithreaded server sederhana yang diimplementasikan dengan Java. Daripada memroses request-request yang masuk dalam thread yang sama dengan yang menerima koneksi client, koneksi ditangani oleh thread pekerja yang akan memroses request tersebut.

Multithreaded Server in Java
Bagian ini menjelaskan multithreaded server sederhana yang diimplementasikan dengan Java. Kode program berdasarkan pada singlethreaded server yang telah disampaikan sebelumnya. Perbedaan utama adalah perulangan server. Daripada memroses request-request yang masuk dalam thread yang sama dengan yang menerima koneksi client, koneksi ditangani oleh thread pekerja yang akan memroses request tersebut.

Catatan: Kode ini menggunakan rancangan “thread per connection” yang sebenarnya juga masih kurang efisien daripada server berbentuk thread pooled.

Berikut ini adalah bagaimana loop server terlihat dalam versi multithreaded:

while(! isStopped()){
Socket clientSocket = null;
try {
clientSocket = this.serverSocket.accept();
} catch (IOException e) {
if(isStopped()) {
System.out.println(“Server Stopped.”) ;
return;
}
throw new RuntimeException(
“Error accepting client connection”, e);
}

new Thread(
new WorkerRunnable(
clientSocket, “Multithreaded Server”)
).start();

}

Perubahan hanya terdapat di dalam loop dari singlethreaded server, ada penambahan kode berikut:

new Thread(
new WorkerRunnable(
clientSocket, “Multithreaded Server”)
).start();

Daripada memroses request-request yang masuk dalam thread yang sama dengan yang menerima koneksi client, koneksi ditangani oleh thread pekerja yang memroses request. Pada cara ini, thread yang mendengarkan request-request yang masuk menghabiskan sebanyak mungkin waktu dalam pemanggilan serverSocket.accept(). Dengan demikian, akan meminimalkan resiko bagi client untuk ditolak aksesnya ke server karena thread yang mendengar tidak dalam pemanggilan accept().
Di bawah ini adalah kode bagi class WorkerRunnable yang dilewatkan ke konstructor thread pekerja:

package servers;

import java.io.InputStream;
import java.io.OutputStream;
import java.io.IOException;
import java.net.Socket;

/**

*/
public class WorkerRunnable implements Runnable{

protected Socket clientSocket = null;
protected String serverText = null;

public WorkerRunnable(Socket clientSocket, String serverText) {
this.clientSocket = clientSocket;
this.serverText = serverText;
}

public void run() {
try {
InputStream input = clientSocket.getInputStream();
OutputStream output = clientSocket.getOutputStream();
long time = System.currentTimeMillis();
output.write((“HTTP/1.1 200 OK\n\nWorkerRunnable: ” +
this.serverText + ” – ” +
time +
“”).getBytes());
output.close();
input.close();
System.out.println(“Request processed: ” + time);
} catch (IOException e) {
//report exception somewhere.
e.printStackTrace();
}
}
}

Kelebihan dari server yang bersifat multithreaded dibandingkan dengan yang singlethreaded dirangkum sebagai berikut:

– Sedikit waktu dihabiskan diluar dari pemanggilan accept().
– Request-request client yang berjalan lama tidak memblok seluruh server.

Sebagaimana disebutkan di depan, lebih banyak waktu yang dibahiskan oleh thread yang memanggil metode serverSocketaccept(), maka server tersebut menjadi lebih responsif. Client dapat mengubungi server hanya saat thread yang sedang mendengarkan ada dalam pemanggilan accept(). Jika tidak, client hanya mendapatkan suatu error.

Dalam suatu singlethreaded server, request yang berjalan lama dapat membuat server tidak responsif untuk jangka waktu yang lama. Ini tidak berlaku bagi suatu multithreaded server, kecuali request yang berjalan lama tersebut mengambil semua waktu CPU dan/atau bandwidth jaringan.
Berikut ini adalah kode program lengkap dari server multithreaded:

package servers;

import java.net.ServerSocket;
import java.net.Socket;
import java.io.IOException;

public class MultiThreadedServer implements Runnable{

protected int serverPort = 8080;
protected ServerSocket serverSocket = null;
protected boolean isStopped = false;
protected Thread runningThread= null;

public MultiThreadedServer(int port){
this.serverPort = port;
}

public void run(){
synchronized(this){
this.runningThread = Thread.currentThread();
}
openServerSocket();
while(! isStopped()){
Socket clientSocket = null;
try {
clientSocket = this.serverSocket.accept();
} catch (IOException e) {
if(isStopped()) {
System.out.println(“Server Stopped.”) ;
return;
}
throw new RuntimeException(
“Error accepting client connection”, e);
}
new Thread(
new WorkerRunnable(
clientSocket, “Multithreaded Server”)
).start();
}
System.out.println(“Server Stopped.”) ;
}

private synchronized boolean isStopped() {
return this.isStopped;
}

public synchronized void stop(){
this.isStopped = true;
try {
this.serverSocket.close();
} catch (IOException e) {
throw new RuntimeException(“Error closing server”, e);
}
}

private void openServerSocket() {
try {
this.serverSocket = new ServerSocket(this.serverPort);
} catch (IOException e) {
throw new RuntimeException(“Cannot open port 8080”, e);
}
}

}

Dan ini adalah kode untuk menjalankannya:

MultiThreadedServer server = new MultiThreadedServer(9000);
new Thread(server).start();

try {
Thread.sleep(20 * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(“Stopping Server”);
server.stop();

Server ini dapat diakses dari web browser pada alamat http://localhost:9000/

  1. 21 February 2010 at 12:39 am

    Газета “На Можайке” Одинцово!
    Это первое ежемесячное полноцветное глянцевое 8-ми полосное информационно – рекламное издание в Одинцово.
    Газета “На Можайке” Одинцово!
    Это прямая доставка всем директорам предприятий, юридических лиц и частным предпринимателям в Одинцово.
    Газета “На Можайке” Одинцово!
    Это более 50 000 читателей вашей рекламы ежемесячно.
    Газета “На Можайке” одинцово!
    Это интересная газета, наполненная интересными статьями, событиями и фоторепортажами.

    Распространение:

    Газета “На Можайке” – журнальное качество.
    1. почтой России:
    Сегодня только почтальон Почты России имеет доступ к почтовым ящикам, мы принципиально не пользуемся услугами коммерческих организаций и не нанимаем для распространения дешевых работников, студентов, безработных.
    Почта России производит адресную доставку:
    – предприятиям г. Одинцово
    – индивидуальным предпринимателям г. Одинцово
    – производственным организациям г. Одинцово
    2. Наша газета доставляется нами бесплатно в кофейни, рестораны. бары города, косметические салоны, студии загара, фитнесс центры и другие заведения где ее будет рада видеть ваша аудитория.
    3. Дополнительно с 1 марта 2010 года газета будет распространятся на фирменных стойках в крупнейших торговых центрах, супермаркетах и в других “модных” местах г. Одинцово.

    ВАЖНО: Мы постоянно будем поднимать тиражную линейку! Информация по ближайшим тиражам:

    февраль – 10 000 шт. март – 10 000 шт. апрель – 15 000 шт. май – 15 000 шт. июнь – 20 000 шт. июль – 20 000 шт.

    P.S. Вы тоже можете принять участие в жизни газеты – пожелания и отзывы о проекте «На Можайке» не останутся без внимания. Пишите нам!

    объявления одинцово
    реклама на рублевке

    редакция газеты «НА МОЖАЙКЕ»

  2. Dridimmeree
    20 March 2011 at 5:14 am

    две девушки познакомятся познакомится с телкой познакомлюсь с парнем пермь секс знакомства в анапе городской сайт знакомств познакомиться в барнауле челябинская обл знакомства в луки знакомства познакомлюсь для разовых встреч знакомства вич иркутск знакомства г белгород секс знакомства екб найти секс знакомства сайт знакомств каневская секс знакомства в печоре знакомства в городе железногорске знакомства г барнаул секс знакомства краснодар с телефонами сайт знакомств свинг сайт знакомств в одессе знакомства г павлово нижегородской области познакомлюсь спарнем Интим знакомства вологды интим знакомства в Червонограде познакомлюсь для секса в Борзе

  3. cvetlanasergeevna
  4. CesseLipPen
    11 November 2011 at 9:55 am

    Posting pertama saya

  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: