+8618733125097
Căutare
roLimba

Cum se utilizează Java NIO pentru comunicarea între procese în sistemele distribuite?

Oct 27, 2025

Sophia Taylor
Sophia Taylor
Sophia este cercetător de piață la Zelian. Ea desfășoară cercetări profunzime pe piețele auto din peste 30 de țări și regiuni în care operează compania, oferind informații valoroase pentru deciziile de afaceri ale companiei.

Hei acolo! În calitate de furnizor NIO, am fost adânc în lumea sistemelor distribuite și a Java NIO de ceva timp. Astăzi, vă voi împărtăși cum să utilizați Java NIO pentru comunicarea între procese în sistemele distribuite.

Ce este Java NIO?

În primul rând, să vorbim despre ce este Java NIO. Java NIO (New I/O) este o alternativă la standardul Java I/O API. A fost introdus în Java 1.4 pentru a oferi un mod mai scalabil și mai eficient de a gestiona operațiunile de intrare și ieșire. Spre deosebire de tradiționalul Java I/O, care este bazat pe flux, Java NIO este bazat pe buffer. Aceasta înseamnă că datele sunt citite mai întâi într-un buffer și apoi procesate de acolo.

Într-un sistem distribuit, în care mai multe procese rulează pe mașini diferite sau pe aceeași mașină, comunicarea între procese (IPC) este crucială. Java NIO poate fi un instrument excelent pentru aceasta, deoarece permite operațiuni I/O fără blocare. I/O fără blocare înseamnă că un fir poate efectua alte sarcini în timp ce așteaptă finalizarea operațiunilor I/O. Acest lucru este foarte important într-un sistem distribuit în care nu doriți ca o singură operațiune I/O să blocheze întregul proces.

Configurarea Mediului

Înainte de a pătrunde în cod, trebuie să aveți Java instalat pe computer. Puteți verifica dacă Java este instalat rulândjava - versiuneîn terminalul dvs. Dacă nu este instalat, accesați site-ul web oficial Oracle sau utilizați un manager de pachete precumaptpe Ubuntu sauberepe macOS pentru a-l instala.

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

Crearea unui server simplu - model client

Să începem prin a crea un model simplu de server - client folosind Java NIO pentru IPC. Serverul va asculta conexiunile de intrare, iar clientul se va conecta la server și va trimite câteva date.

import java.io.IOException; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.ServerSocketChannel; import java.nio.channels.SocketChannel; public class NIOServer { public static void main(String[] args) { try (ServerSocketChannel serverSocketChannel = ServerSocketChannel.open()) { serverSocketChannel.socket().bind(new InetSocketAddress(8080)); System.out.println("Serverul ascultă pe portul 8080"); while (adevărat) { SocketChannel socketChannel = serverSocketChannel.accept(); ByteBuffer buffer = ByteBuffer.allocate(1024); int bytesRead = socketChannel.read(buffer); while (bytesRead > 0) { buffer.flip(); octet[] date = octet nou[buffer.limit()]; buffer.get(date); String mesaj = new String(date); System.out.println("Primit: " + mesaj); buffer.clear(); bytesRead = socketChannel.read(buffer); } socketChannel.close(); } } catch (IOException e) { e.printStackTrace(); } } }
import java.io.IOException; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.SocketChannel; public class NIOClient { public static void main(String[] args) { try (SocketChannel socketChannel = SocketChannel.open()) { socketChannel.connect(new InetSocketAddress("localhost", 8080)); String message = "Bună, server! Acesta este un mesaj de testare."; ByteBuffer buffer = ByteBuffer.wrap(message.getBytes()); socketChannel.write(buffer); System.out.println("Mesajul trimis la server."); } catch (IOException e) { e.printStackTrace(); } } }

În codul serverului, deschidem mai întâi aServerSocketChannelși leagă-l la portul 8080. Apoi, intrăm într-o buclă infinită pentru a accepta conexiunile de intrare. Când o conexiune este acceptată, citim datele dinSocketChannelîntr-oByteBuffer.

În codul clientului, deschidem unSocketChannelși conectați-l la serverul care ruleazălocalhostla portul 8080. Apoi, împachetăm mesajul pe care vrem să-l trimitem într-unByteBufferși scrieți-l laSocketChannel.

Gestionarea mai multor clienți

Într-un sistem distribuit în lumea reală, probabil că veți avea mai mulți clienți care se conectează la server. Java NIO facilitează gestionarea mai multor clienți folosind selectoare. Un selector permite unui singur fir să monitorizeze mai multe canale pentru evenimente I/O, cum ar fi evenimente de conexiune, citire și scriere.

import java.io.IOException; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.nio.channels.ServerSocketChannel; import java.nio.channels.SocketChannel; import java.util.Iterator; import java.util.Set; public class MultiClientServer { public static void main(String[] args) { try (ServerSocketChannel serverSocketChannel = ServerSocketChannel.open()) { serverSocketChannel.socket().bind(new InetSocketAddress(8080)); serverSocketChannel.configureBlocking(false); Selector selector = Selector.open(); serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT); System.out.println("Serverul ascultă pe portul 8080"); while (true) { int readyChannels = selector.select(); dacă (readyChannels == 0) continuă; Set<SelectionKey> selectedKeys = selector.selectedKeys(); Iterator<SelectionKey> keyIterator = selectedKeys.iterator(); while (keyIterator.hasNext()) { Cheie SelectionKey = keyIterator.next(); if (key.isAcceptable()) { ServerSocketChannel serverChannel = (ServerSocketChannel) key.channel(); SocketChannel socketChannel = serverChannel.accept(); socketChannel.configureBlocking(false); socketChannel.register(selector, SelectionKey.OP_READ); } else if (key.isReadable()) { SocketChannel socketChannel = (SocketChannel) key.channel(); ByteBuffer buffer = ByteBuffer.allocate(1024); int bytesRead = socketChannel.read(buffer); if (bytesRead > 0) { buffer.flip(); octet[] date = octet nou[buffer.limit()]; buffer.get(date); String mesaj = new String(date); System.out.println("Primit de la client: " + mesaj); } } keyIterator.remove(); } } } catch (IOException e) { e.printStackTrace(); } } }

În acest cod, deschidem mai întâi aServerSocketChannelși configurați-l să nu fie blocant. Apoi, deschidem unSelectorși înregistrațiServerSocketChannelcu ea pentruOP_ACCEPTeveniment.

În bucla infinită, apelămselector.select()pentru a aștepta evenimente I/O. Când are loc un eveniment, repetăm ​​tastele selectate. Dacă cheia este acceptabilă, acceptăm noua conexiune și înregistrăm noua conexiuneSocketChannelcu selectorul pentruOP_READeveniment. Dacă cheia este lizibilă, citim datele dinSocketChannel.

Utilizarea Java NIO în produsele noastre NIO

La compania noastră, folosim Java NIO pentru IPC în sistemele noastre distribuite legate de vehiculele electrice. De exemplu, înOnvo L90 Pro Six Seat Edition 2025,Onvo L90 Max Six Seat Edition 2025, șiLedao L60 2025 Model 60kWh Spate - Versiune cu tracțiune pe roți, diferitele componente trebuie să comunice între ele. Java NIO ne ajută să realizăm o comunicare eficientă și scalabilă între aceste componente.

Concluzie

Java NIO este un instrument puternic pentru comunicarea între procese în sistemele distribuite. Oferă operațiuni I/O fără blocare, care pot îmbunătăți semnificativ performanța și scalabilitatea sistemului dumneavoastră. Prin utilizarea selectoarelor, puteți gestiona mai mulți clienți cu un singur fir, făcând sistemul dvs. mai eficient din punct de vedere al resurselor.

Dacă sunteți interesat să utilizați Java NIO pentru IPC în sistemele dvs. distribuite, în special în contextul produselor pentru vehicule electrice precum al nostru, ne-ar plăcea să discutăm. Indiferent dacă doriți să vă optimizați sistemele existente sau să construiți altele noi de la zero, vă putem oferi expertiza și sprijinul nostru. Simțiți-vă liber să ne contactați pentru a începe o discuție privind achizițiile și pentru a vedea cum putem colabora pentru a vă atinge obiectivele.

Referințe

  • „Java NIO” - documentație oficială Oracle
  • „Java eficient” de Joshua Bloch

Trimite anchetă