User Tools

Site Tools


tanszek:oktatas:informacios_rendszerek_integralasa:protobuf

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
tanszek:oktatas:informacios_rendszerek_integralasa:protobuf [2024/03/17 17:32] kneheztanszek:oktatas:informacios_rendszerek_integralasa:protobuf [2025/03/21 20:03] (current) – [Haladó lehetőségek] knehez
Line 1: Line 1:
-===== Protocol Buffer =====+===== Protocol Buffers =====
  
-Strukturált adatok szerializációjához használható megoldás a Google fejlesztésébenEnnél az adatintegrációs módszernél is megjelenik az interfész leírás.+A Protocol Buffers (Protobuf) a Google által fejlesztett módszer a **strukturált adatok szerializációjára** (bináris formába alakítására)Különösen előnyös azokban az alkalmazásokban, amelyek szerverekkel kommunikálnak vagy adatokat tárolnak, ahol az **adatátvitel sebessége** és hatékonysága kritikus. A Protobuf úgy lett tervezve, hogy egyszerűbb és hatékonyabb legyen az XML-nél és JSON-nál, kisebb üzenetméreteket és gyorsabb feldolgozást kínál.
  
-protokol buffer szerializáció miatt binárisViszont nagy előnye, hogy sok technológiát támogatez által növelve plattformfüggetlenséget.+**Protobuf** strukturált adatokat egy standard formátumban: **.proto** fájlban adja meg, amelyet aztán felhasználnak forráskód generálására a __kiválasztott programozási nyelven__. Ezt a forráskódot használják a strukturált adatok írására és olvasására különböző adatfolyamokból. 
 + 
 +==== A Protobuf jellemzői ==== 
 +  * **Hatékonyság**: A Protobuf hatékonyabb az XML és JSON alapú adattovábbításnál, mind a sebesség, mind az adatok méretének tekintetében. 
 +  * **Többnyelvű támogatás**: A Protobuf támogatja a kódgenerálást különböző programozási nyelveken, lehetővé téve az adatcsere egyszerűsítését. 
 +  * **Visszafelé kompatibilitás**: A Protobuf úgy van kialakítva, hogy kompatibilis maradjon az adatstruktúra változásai esetén islehetővé téve a régi kód számára az új adatformátumok olvasását és fordítva. 
 + 
 +A Protobuf egy adatintegrációs projektben való implementálásához tipikusan: 
 + 
 +  * Definiálni kell az adatszerkezeteket egy **.proto** fájlban. 
 +  * Protobuf fordító (**protoc**) az adathozzáférési osztályokat legenerálja a .proto fájlok alapján. 
 +  * A fejlesztő könnyen használni tudja ezeket a **generált osztályokat** szolgáltatások közötti kommunikációhoz.
  
 További részletek itt olvashatók: További részletek itt olvashatók:
  
 https://developers.google.com/protocol-buffers/docs/tutorials https://developers.google.com/protocol-buffers/docs/tutorials
- 
  
  
Line 42: Line 52:
 A futtatás után létrejön a book_pb2.py ami generált forráskód, és az adat interfészt tartalmazza. Ennek segítségével lehet kezelni (szerializálni és de-szerializálni) az adatokat. A futtatás után létrejön a book_pb2.py ami generált forráskód, és az adat interfészt tartalmazza. Ennek segítségével lehet kezelni (szerializálni és de-szerializálni) az adatokat.
  
-4.) Futtassuk le a **pip install --upgrade protobuf** parancsot. +4.) Futtassuk le a **pip install protobuf** parancsot. 
  
 5.) Hozzuk létre a server.py fájlt a következő tartalommal: 5.) Hozzuk létre a server.py fájlt a következő tartalommal:
Line 151: Line 161:
  
 8.) Futtassuk le a szervert és klienst. **python server.py** majd a **python client.py** parancsokat és nézzük meg és elemezzük mi történik?  8.) Futtassuk le a szervert és klienst. **python server.py** majd a **python client.py** parancsokat és nézzük meg és elemezzük mi történik? 
 +
 +9.) Írjuk meg más nyelven a klienst! 
 +
 +Egy lehetséges megoldás az alábbi java-ban. Generáljuk le a protoc segítségével a java helper osztályt. A Maven repository-ból töltsük le a protobuf.jar-t (https://repo1.maven.org/maven2/com/google/protobuf/protobuf-java/), figyelve a megfelelő verzióra. 
 +
 +<sxh java>
 +import java.io.IOException;
 +import java.io.ObjectOutputStream;
 +import java.net.Socket;
 +
 +public class Client {
 +    Socket requestSocket;
 +    ObjectOutputStream out;
 +
 +    Client() {
 +    }
 +
 +    void run() {
 +        try {
 +            requestSocket = new Socket("localhost", 4100);
 +            out = new ObjectOutputStream(requestSocket.getOutputStream());
 +            BookOuterClass.Books books = BookOuterClass.Books.parseFrom(requestSocket.getInputStream());
 +            for (BookOuterClass.Book book : books.getBooksList()) {
 +                System.out.println("Book ID: " + book.getId());
 +                System.out.println("Author: " + book.getAuthor());
 +            }
 +
 +        } catch (IOException ioException) {
 +            ioException.printStackTrace();
 +        }
 +    }
 +
 +    public static void main(String args[]) {
 +        Client client = new Client();
 +        client.run();
 +    }
 +}
 +</sxh>
 +
 +
tanszek/oktatas/informacios_rendszerek_integralasa/protobuf.1710696725.txt.gz · Last modified: 2024/03/17 17:32 by knehez