Versuchen Sie die interlinguale Kommunikation zwischen Elixir und Python mit gRPC.
In diesem Artikel,
--gRPC-Server: Elixier --gRPC-Client: Python3
Es wird gesagt.
hart | Raspberry Pi 3B+ |
OS | Raspbian Buster, Ubuntu Server 20.04LTS |
Python | 3.7.3 |
Elixir | 1.7.4 (compiled with Erlang/OTP 21) |
Bereiten Sie sich zuerst auf die Elixierseite vor.
Hier das Beispiel "[examples / helloworld](https://github.com/elixir-grpc/", das in der [elixir-grpc-Bibliothek] enthalten ist (https://github.com/elixir-grpc/grpc) grpc / tree / master / examples / helloworld) ”.
Wenn der Client dem Namen einen Namen zuweist und eine Anfrage stellt, gibt der Server die Zeichenfolge "Hallo
Befehlszeile
$ pwd
..../elixir/
#Klon
$ git clone https://github.com/elixir-grpc/grpc.git
#Gehen Sie zum Beispielverzeichnis
$ cd ./grpc/examples/helloworld/
#Abhängigkeitsbehandlung, Kompilieren.
$ mix do deps.get, compile
Im Folgenden wird beschrieben, wie Sie einen Client-Server auf der Python-Seite erstellen.
$ sudo apt install python3-grpcio python3-grpc-tools -y
Bereiten Sie ein Tool vor, das die Protodatei analysiert und eine Schnittstelle für Python generiert.
Befehlszeile
$ pwd
..../elixir/grpc/examples/helloworld
#Erstellen Sie einen Ordner zum Speichern von Python-Skripten
$ mkdir python
$ cd python
#Kopieren Sie die von elixir definierte Protodatei
python $ cp ../priv/protos/helloworld.proto ./
#Werkzeugdatei generieren
python $ touch codegen.py
python $ chmod 755 codegen.py
Quellcode für Tools, die Schnittstellen für Python generieren.
Dieses Mal zielen wir auf helloworld.proto
, also verwenden wir __NAME =" helloworld "
im Code.
codegen.py
#!/usr/bin/env /usr/bin/python3
# -*- coding: utf-8 -*-
"""
Protodateien kompilieren
Die folgenden zwei Dateien werden generiert.
・*_pb2.py :Schnittstelle serialisieren
・*_pb2_grpc.py :gRPC-Schnittstelle
"""
from grpc.tools import protoc
#Name der Protodatei (Namensteil)
__NAME="helloworld"
#Schnittstelle für Python generieren
protoc.main(
(
'',
'-I.',
'--python_out=.',
'--grpc_python_out=.',
('{}.proto'.format(__NAME)),
)
)
Erzeugt eine Schnittstelle für Python.
Befehlszeile
python $ ./codegen.py
python $ ls
codegen.py helloworld_pb2_grpc.py helloworld_pb2.py helloworld.proto
Zwei Dateien, * _pb2.py
und * _ pb2_grpc.py
, wurden generiert.
Befehlszeile
#Datei generieren
python $ touch client.py
python $ chmod 755 client.py
client.py
#!/usr/bin/env /usr/bin/python3
# -*- coding: utf-8 -*-
"""
gRPC-Client
by myasu 2020
"""
import sys
import grpc
#Importieren Sie die zuvor aus Proto generierte Schnittstelle
import helloworld_pb2
import helloworld_pb2_grpc
def grpc_client(request):
"""gRPC-Client-Kommunikationsverarbeitung
Parameters
----------
request : string
Nachricht, die an den gRPC-Server gesendet werden soll
"""
#Stellen Sie eine Verbindung her, indem Sie die Adresse und den Port des gRPC-Servers auf der Elixir-Seite angeben
with grpc.insecure_channel('localhost:50051') as channel:
stub = helloworld_pb2_grpc.GreeterStub(channel)
#Anfrage an den gRPC-Server auf der Elixir-Seite
response = stub.SayHello(helloworld_pb2.HelloRequest(name=request))
#Überprüfen Sie den Inhalt der Antwort
print(' Response:', response.message)
if __name__ == '__main__':
"""Hauptverarbeitung
"""
#Argumente lesen
args = sys.argv
#Überprüfen Sie die Länge des Arguments
if len(args) == 2:
#Lauf
grpc_client(args[1])
else:
#Error
print('Arguments are too short')
Starten Sie zuerst die Server- / Elixierseite.
Terminal 1 / Elixir gRPC-Serverseite
$ mix grpc.server
10:58:01.872 [warn] cowlib should be >= 2.9.0, it's 2.8.1 now. See grpc's README for details
10:58:01.977 [info] Running Helloworld.Endpoint with Cowboy using http://0.0.0.0:50051
(... Ab hier wird es angezeigt, wenn eine Kundenanfrage vorliegt ...)
22:58:04.739 [info] Handled by Helloworld.Greeter.Server.say_hello
22:58:04.744 [info] Response :ok in 4ms
22:58:09.237 [info] Handled by Helloworld.Greeter.Server.say_hello
22:58:09.237 [info] Response :ok in 15μs
22:58:13.552 [info] Handled by Helloworld.Greeter.Server.say_hello
22:58:13.552 [info] Response :ok in 15μs
[Ctrl-\]Halte bei
Führen Sie als Nächstes die Client / Python-Seite aus. Jede Nachricht kann im Argument des Skripts angegeben werden.
Terminal 2-Python gRPC-Client-Seite
python $ ./client.py chika
Response: Hello chika
python $ ./client.py you
Response: Hello you
python $ ./client.py ruby
Response: Hello ruby
python $ ./client.py CYaRon!
Response: Hello CYaRon!
Der Server gibt die Nachricht am Anfang mit "Hallo" zurück. Mit diesem Gefühl war die Kommunikation zwischen verschiedenen Sprachen möglich.
Recommended Posts