Rumah  >  Artikel  >  Java  >  Bagaimana untuk mengendalikan sambungan serentak dalam pengaturcaraan rangkaian Java?

Bagaimana untuk mengendalikan sambungan serentak dalam pengaturcaraan rangkaian Java?

王林
王林asal
2024-04-15 09:36:02665semak imbas

Terdapat dua cara untuk mengendalikan sambungan serentak dalam pengaturcaraan rangkaian Java: Kumpulan benang: Buat kumpulan benang yang telah dibuat dan terurus, dan dapatkan benang daripada kumpulan benang untuk mengendalikan sambungan apabila pelanggan menyambung. Pemilih NIO: Proses berbilang sambungan dalam satu utas Apabila klien menyambung atau data boleh dibaca, peristiwa itu dicetuskan dan kemudian diproses.

Bagaimana untuk mengendalikan sambungan serentak dalam pengaturcaraan rangkaian Java?

Pengendalian sambungan serentak dalam pengaturcaraan rangkaian Java

Dalam pengaturcaraan rangkaian Java, pengendalian sambungan serentak adalah penting. Sambungan serentak ialah apabila aplikasi mengendalikan berbilang pelanggan yang mengaksesnya pada masa yang sama.

Kolam Benang

Kaedah biasa pemprosesan konkurensi ialah menggunakan kolam benang. Kumpulan benang ialah kumpulan urutan yang telah dibuat dan diuruskan. Apabila pelanggan menyambung, benang boleh diperolehi daripada kumpulan benang untuk mengendalikan sambungan. Ini menghalang urutan baharu daripada dicipta untuk setiap sambungan, sekali gus menjimatkan sumber.

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

class ThreadPoolServer {

    public static void main(String[] args) {
        // 创建一个线程池,指定线程数
        ExecutorService threadPool = Executors.newFixedThreadPool(10);

        // 创建ServerSocket监听端口
        ServerSocket serverSocket = new ServerSocket(8080);

        while (true) {
            // 等待客户端连接
            Socket clientSocket = serverSocket.accept();

            // 从线程池中获取一个线程处理客户端连接
            threadPool.execute(new ClientHandler(clientSocket));
        }
    }

    private static class ClientHandler implements Runnable {

        private Socket clientSocket;

        public ClientHandler(Socket clientSocket) {
            this.clientSocket = clientSocket;
        }

        @Override
        public void run() {
            // 处理客户端连接
            try {
                // 获取客户端输入
                BufferedReader reader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
                String line = reader.readLine();
                
                // 向客户端发送响应
                BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputStream()));
                writer.write("HTTP/1.1 200 OK\n");
                writer.flush();
                
                // 关闭连接
                clientSocket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

NioSelector

Pilihan lain untuk mengendalikan sambungan serentak ialah menggunakan NIO Selector. Pemilih NIO membenarkan berbilang sambungan dikendalikan dalam satu utas. Pemilih mencetuskan peristiwa apabila klien menyambung atau data boleh dibaca.

rreeee

Atas ialah kandungan terperinci Bagaimana untuk mengendalikan sambungan serentak dalam pengaturcaraan rangkaian Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn