+8618733125097
Cari
idBahasa

Bagaimana cara menggunakan Java NIO untuk komunikasi antar proses dalam sistem terdistribusi?

Oct 27, 2025

Sophia Taylor
Sophia Taylor
Sophia adalah peneliti pasar di Zelian. Dia melakukan penelitian mendalam tentang pasar mobil di lebih dari 30 negara dan wilayah di mana perusahaan beroperasi, memberikan wawasan berharga untuk keputusan bisnis perusahaan.

Hai! Sebagai pemasok NIO, saya sudah cukup lama berkecimpung di dunia sistem terdistribusi dan Java NIO. Hari ini, saya akan berbagi dengan Anda cara menggunakan Java NIO untuk komunikasi antar proses dalam sistem terdistribusi.

Apa itu Java NIO?

Hal pertama yang pertama, mari kita bahas tentang apa itu Java NIO. Java NIO (I/O Baru) adalah alternatif dari Java I/O API standar. Ini diperkenalkan di Java 1.4 untuk menyediakan cara yang lebih terukur dan efisien dalam menangani operasi input dan output. Berbeda dengan Java I/O tradisional yang berbasis stream, Java NIO berbasis buffer. Ini berarti data dibaca ke dalam buffer terlebih dahulu dan kemudian diproses dari sana.

Dalam sistem terdistribusi, di mana banyak proses berjalan pada mesin berbeda atau mesin yang sama, komunikasi antar proses (IPC) sangat penting. Java NIO dapat menjadi alat yang hebat untuk ini karena memungkinkan operasi I/O yang tidak memblokir. I/O non-pemblokiran berarti thread dapat melakukan tugas lain sambil menunggu operasi I/O selesai. Ini sangat penting dalam sistem terdistribusi di mana Anda tidak ingin satu operasi I/O memblokir seluruh proses.

Menyiapkan Lingkungan

Sebelum kita mendalami kodenya, Anda perlu menginstal Java di mesin Anda. Anda dapat memeriksa apakah Java diinstal dengan menjalankannyajava - versidi terminal Anda. Jika belum diinstal, kunjungi situs web resmi Oracle atau gunakan manajer paket sepertitepatdi Ubuntu ataubuatandi macOS untuk menginstalnya.

Onvo L90 Pro Six Seat Edition 2025 suppliersOnvo L90 Max Six Seat Edition 2025 high quality

Membuat Server Sederhana - Model Klien

Mari kita mulai dengan membuat model server-klien sederhana menggunakan Java NIO untuk IPC. Server akan mendengarkan koneksi masuk, dan klien akan terhubung ke server dan mengirim beberapa data.

impor java.io.IOException; impor java.net.InetSocketAddress; impor java.nio.ByteBuffer; impor java.nio.channels.ServerSocketChannel; impor java.nio.channels.SocketChannel; kelas publik NIOServer { public static void main(String[] args) { coba (ServerSocketChannel serverSocketChannel = ServerSocketChannel.open()) { serverSocketChannel.socket().bind(new InetSocketAddress(8080)); System.out.println("Server mendengarkan pada port 8080"); while (benar) { SocketChannel socketChannel = serverSocketChannel.accept(); Buffer ByteBuffer = ByteBuffer.alokasikan(1024); int bytesRead = socketChannel.baca(buffer); while (byteBaca > 0) { buffer.flip(); byte[] data = byte baru[buffer.limit()]; buffer.mendapatkan(data); Pesan string = String baru(data); System.out.println("Diterima: " + pesan); buffer.hapus(); bytesRead = socketChannel.baca(buffer); } socketChannel.close(); } } catch (IOException e) { e.printStackTrace(); } } }
impor java.io.IOException; impor java.net.InetSocketAddress; impor java.nio.ByteBuffer; impor java.nio.channels.SocketChannel; kelas publik NIOClient { public static void main(String[] args) { coba (SocketChannel socketChannel = SocketChannel.open()) { socketChannel.connect(new InetSocketAddress("localhost", 8080)); String message = "Halo, server! Ini adalah pesan percobaan."; ByteBuffer buffer = ByteBuffer.wrap(pesan.getBytes()); socketChannel.write(buffer); System.out.println("Pesan terkirim ke server."); } catch (IOException e) { e.printStackTrace(); } } }

Di kode server, pertama kita buka aServerSocketChanneldan mengikatnya ke port 8080. Kemudian, kita memasuki loop tak terbatas untuk menerima koneksi masuk. Ketika koneksi diterima, kami membaca data dariSaluran Soketmenjadi aByteBuffer.

Dalam kode klien, kami membuka aSaluran Soketdan menghubungkannya ke server yang sedang berjalanhost lokalpada port 8080. Kemudian kita bungkus pesan yang ingin kita kirim dalam aByteBufferdan menulisnya keSaluran Soket.

Menangani Banyak Klien

Dalam sistem terdistribusi dunia nyata, Anda mungkin memiliki banyak klien yang terhubung ke server. Java NIO memudahkan penanganan banyak klien menggunakan penyeleksi. Selektor memungkinkan satu thread memantau beberapa saluran untuk peristiwa I/O seperti peristiwa koneksi, baca, dan tulis.

impor java.io.IOException; impor java.net.InetSocketAddress; impor java.nio.ByteBuffer; impor java.nio.channels.SelectionKey; import java.nio.channels.Selector; impor java.nio.channels.ServerSocketChannel; impor java.nio.channels.SocketChannel; impor java.util.Iterator; impor java.util.Set; kelas publik MultiClientServer { public static void main(String[] args) { coba (ServerSocketChannel serverSocketChannel = ServerSocketChannel.open()) { serverSocketChannel.socket().bind(new InetSocketAddress(8080)); serverSocketChannel.configureBlocking(salah); Pemilih pemilih = Selector.open(); serverSocketChannel.register(pemilih, SelectionKey.OP_ACCEPT); System.out.println("Server mendengarkan pada port 8080"); while (benar) { int readyChannels = selector.select(); jika (readyChannels == 0) lanjutkan; Setel<SelectionKey>selectKeys = selector.selectedKeys(); Iterator<SelectionKey> keyIterator = dipilihKeys.iterator(); while (keyIterator.hasNext()) { Kunci SelectionKey = keyIterator.next(); if (key.isAcceptable()) { ServerSocketChannel serverChannel = (ServerSocketChannel) key.channel(); SocketChannel socketChannel = serverChannel.accept(); socketChannel.configureBlocking (salah); socketChannel.register(pemilih, SelectionKey.OP_READ); } else if (key.isReadable()) { SocketChannel socketChannel = (SocketChannel) key.channel(); Buffer ByteBuffer = ByteBuffer.alokasikan(1024); int bytesRead = socketChannel.baca(buffer); if (byteBaca > 0) { buffer.flip(); byte[] data = byte baru[buffer.limit()]; buffer.mendapatkan(data); Pesan string = String baru(data); System.out.println("Diterima dari klien: " + pesan); } } keyIterator.hapus(); } } } tangkapan (IOException e) { e.printStackTrace(); } } }

Dalam kode ini, pertama-tama kita membuka aServerSocketChanneldan konfigurasikan menjadi non-pemblokiran. Lalu kita buka aPemilihdan daftarkanServerSocketChanneldengan itu untukOP_ACCEPTperistiwa.

Dalam putaran tak terbatas, kita memanggilpemilih.pilih()untuk menunggu acara I/O. Ketika suatu peristiwa terjadi, kami mengulangi kunci yang dipilih. Jika kuncinya dapat diterima, kami menerima koneksi baru dan mendaftarkan koneksi baruSaluran Soketdengan pemilih untukOP_BACAperistiwa. Jika kuncinya dapat dibaca, kami membaca data dariSaluran Soket.

Menggunakan Java NIO di Produk NIO Kami

Di perusahaan kami, kami menggunakan Java NIO untuk IPC dalam sistem terdistribusi kami yang terkait dengan kendaraan listrik. Misalnya saja diOnvo L90 Pro Edisi Enam Kursi 2025,Onvo L90 Max Enam Kursi Edisi 2025, DanLedao L60 2025 Model 60kWh Versi Penggerak Roda Belakang, komponen yang berbeda perlu berkomunikasi satu sama lain. Java NIO membantu kita mencapai komunikasi yang efisien dan terukur antara komponen-komponen ini.

Kesimpulan

Java NIO adalah alat yang ampuh untuk komunikasi antar proses dalam sistem terdistribusi. Ini menyediakan operasi I/O non-pemblokiran, yang secara signifikan dapat meningkatkan kinerja dan skalabilitas sistem Anda. Dengan menggunakan penyeleksi, Anda dapat menangani banyak klien dengan satu thread, menjadikan sistem Anda lebih efisien sumber daya.

Jika Anda tertarik menggunakan Java NIO untuk IPC di sistem terdistribusi Anda, terutama dalam konteks produk kendaraan listrik seperti milik kami, kami ingin mengobrol. Baik Anda ingin mengoptimalkan sistem yang ada atau membangun sistem baru dari awal, kami dapat menawarkan keahlian dan dukungan kami. Jangan ragu untuk menghubungi kami untuk memulai diskusi pengadaan dan melihat bagaimana kami dapat bekerja sama untuk mencapai tujuan Anda.

Referensi

  • "Java NIO" - dokumentasi resmi Oracle
  • "Jawa Efektif" oleh Joshua Bloch

Kirim permintaan