tanszek:oktatas:informacios_rendszerek_integralasa:protobuf
Differences
This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| tanszek:oktatas:informacios_rendszerek_integralasa:protobuf [2021/03/02 09:04] – külső szerkesztés 127.0.0.1 | tanszek:oktatas:informacios_rendszerek_integralasa:protobuf [2025/03/21 20:03] (current) – [Haladó lehetőségek] knehez | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ===== Protocol | + | ===== Protocol |
| - | Strukturált adatok szerializációjához használható megoldás | + | A Protocol Buffers (Protobuf) |
| - | A protokol buffer | + | A **Protobuf** |
| + | |||
| + | ==== A Protobuf jellemzői ==== | ||
| + | * **Hatékonyság**: | ||
| + | * **Többnyelvű támogatás**: | ||
| + | * **Visszafelé kompatibilitás**: | ||
| + | |||
| + | 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** | ||
| További részletek itt olvashatók: | További részletek itt olvashatók: | ||
| https:// | https:// | ||
| - | |||
| ===== Python mintafeladat ===== | ===== Python mintafeladat ===== | ||
| - | 1.) Telepítsük fel a hivatalos oldalról a fordítót. https:// | + | 1.) Telepítsük fel a hivatalos oldalról a fordítót. https:// |
| 2.) Hozzunk létre egy könyvtárat ./proto néven és a book.proto állományt a következő tartalommal: | 2.) Hozzunk létre egy könyvtárat ./proto néven és a book.proto állományt a következő tartalommal: | ||
| - | <code c> | + | <sxh c> |
| syntax = " | syntax = " | ||
| Line 30: | Line 40: | ||
| repeated Book books = 1; | repeated Book books = 1; | ||
| } | } | ||
| - | </code> | + | </sxh> |
| Két üzenetet hoztunk létre, Book és Books néven. A Books több Book-ot tartalmazhat. A sorok végén az = 1, = 2 a struktúra mező belső pozícióját adja meg, egytől indul a számozás. | Két üzenetet hoztunk létre, Book és Books néven. A Books több Book-ot tartalmazhat. A sorok végén az = 1, = 2 a struktúra mező belső pozícióját adja meg, egytől indul a számozás. | ||
| Line 42: | Line 52: | ||
| A futtatás után létrejön a book_pb2.py ami generált forráskód, | A futtatás után létrejön a book_pb2.py ami generált forráskód, | ||
| - | 4.) Futtassuk le a **pip install | + | 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: | ||
| - | <code python> | + | <sxh python> |
| import socket | import socket | ||
| import book_pb2 | import book_pb2 | ||
| Line 82: | Line 92: | ||
| s.close() | s.close() | ||
| - | </code> | + | </sxh> |
| 6.) Hozzuk létre a create_books.py állományt az alábbi tartalommal: | 6.) Hozzuk létre a create_books.py állományt az alábbi tartalommal: | ||
| - | <code python> | + | <sxh python> |
| import book_pb2 | import book_pb2 | ||
| Line 111: | Line 121: | ||
| return books | return books | ||
| - | </code> | + | </sxh> |
| 7.) Hozzuk létre a client.py állományt az alábbi tartalommal: | 7.) Hozzuk létre a client.py állományt az alábbi tartalommal: | ||
| - | <code python> | + | <sxh python> |
| import socket | import socket | ||
| import book_pb2 | import book_pb2 | ||
| Line 148: | Line 158: | ||
| fb.write(msg) | fb.write(msg) | ||
| print(" | print(" | ||
| - | </code> | + | </sxh> |
| 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:// | ||
| + | |||
| + | <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(" | ||
| + | out = new ObjectOutputStream(requestSocket.getOutputStream()); | ||
| + | BookOuterClass.Books books = BookOuterClass.Books.parseFrom(requestSocket.getInputStream()); | ||
| + | for (BookOuterClass.Book book : books.getBooksList()) { | ||
| + | System.out.println(" | ||
| + | System.out.println(" | ||
| + | } | ||
| + | |||
| + | } catch (IOException ioException) { | ||
| + | ioException.printStackTrace(); | ||
| + | } | ||
| + | } | ||
| + | |||
| + | public static void main(String args[]) { | ||
| + | Client client = new Client(); | ||
| + | client.run(); | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | |||
tanszek/oktatas/informacios_rendszerek_integralasa/protobuf.1614675897.txt.gz · Last modified: 2021/03/02 09:04 by 127.0.0.1
