tanszek:oktatas:informacios_rendszerek_integralasa:protobuf
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
tanszek:oktatas:informacios_rendszerek_integralasa:protobuf [2024/03/14 11:21] – [Python mintafeladat] knehez | 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:// | ||
- | |||
Line 17: | Line 27: | ||
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.1710415295.txt.gz · Last modified: 2024/03/14 11:21 by knehez