Örnek

ExecutorService ile Açılan Socket'i İşleylen Bir Örnek

Bu örnekte ExecutorService her yeni bir socket açıldığında isteği ayrı bir Thread yaratarak işleyen bir örnek görülmektedir.Örnek uygulama aşağıdaki gibidir:
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class NetworkService implements Runnable {

	private final ServerSocket serverSocket;
	private final ExecutorSevrvice pool;

	public NetworkService(int port, int poolSize) throws IOException {
		serverSocket = new ServerSocket(port);
		pool = Executors.newFixedThreadPool(poolSize);
	}

	public void run() { // run the service
		try {
			for (;;) {
				pool.execute(new Handler(serverSocket.accept()));
			}
		} catch (IOException ex) {
			pool.shutdown();
		}
	}

	public static class Handler implements Runnable {
		private final Socket socket;

		Handler(Socket socket) {
			this.socket = socket;
		}

		public void run() {
			System.out.println("socket handler run...");
		}
	}
	
	public static void main(String[] args) throws IOException {
		
		NetworkService networkService=new NetworkService(8081, 10);
		
		System.out.println("Network service running");
		
		networkService.run();

	}

}
NetworkService sınıfınun run yöntemi main'deki gibi çağrıldığında serverSocket.accept() ile yeni bir socket beklenir duruma geçilecektir. 8081 portunu dinlenilmektedir. En fazla 10 thread olacak şekilde bir havuz yaratılmıştır. Bir socket açılırsa Handler'daki kod çalıştırılır ve yeni bir socket beklenir. Test edebilmek için socket açan bir client örneği yapalım:
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;

public class NetworkServiceClient {
	
	public static void main(String[] args) 
			throws UnknownHostException, IOException {
		
		for (int i=0;i<10;i++) {
			Socket socket=new Socket("10.26.12.162", 8081);
		}	
		
	}
}
Döngü açıp 10 tane socket açıyoruz. Her socket'te sunucu tarafında Handler çalıştırılır ve ekrana socket hander run... yazısını yazar:
Network service running
socket handler run...
socket handler run...
socket handler run...
socket handler run...
socket handler run...
socket handler run...
socket handler run...
socket handler run...
socket handler run...
socket handler run...
Eğer 10 thread çalışırken yeni thread'lar eklenirse, önce elindeki 10 thread'i bitirir ve diğer 10 thread'e devam eder. Bu şekilde tüm thread'leri çalıştırır. Bunu anlamak için run yöntemini aşağıdaki çalıştırıp, Thread'leri bekletebiliriz:
public void run() {
	
	try {
		Thread.sleep(10000);
	} catch (InterruptedException e) {
		e.printStackTrace();
	}
	
	System.out.println("socket hander run...");
}
Bu şekilde döngüyü 100'e çekip çalıştırırsak, 10'ar 10'ar mesajların yazılacağını görebilirsiniz.
zafer.teker , 07.03.2020

Bu Sayfayı Paylaş:

Fibiler Üyelerinin Yorumları


Tüm üyeler içeriklere yorum ekleyerek katkıda bulunabilir : Yorum Gir



Bu Sayfayı Paylaş:

İletişim Bilgileri

Takip Et

Her Hakkı Saklıdır. Bu sitede yayınlanan tüm bilgi ve fikirlerin kullanımından fibiler.com sorumlu değildir. Bu sitede üretilmiş , derlenmiş içerikleri, fibiler.com'u kaynak göstermek koşuluyla kendi sitenizde kullanılabilirsiniz. Ancak telif hakkı olan içeriklerin hakları sahiplerine aittir