PDA

View Full Version : Comunicazione Python e altri linguaggi


gabmac2
11-07-2020, 18:19
Dovendo far comunicare Python, Java o Kotlin e Swift, JSON e SSL può essere una buona soluzione?
Grazie in anticipo

pabloski
12-07-2020, 13:58
Dovendo far comunicare Python, Java o Kotlin e Swift, JSON e SSL può essere una buona soluzione?
Grazie in anticipo

Definisci "comunicare".

gabmac2
12-07-2020, 14:35
diciamo, inviarsi dati in maniera sincrona o asincrona, ma soprattutto in maniera sicura

pabloski
12-07-2020, 15:27
diciamo, inviarsi dati in maniera sincrona o asincrona, ma soprattutto in maniera sicura

Il punto è tramite quale canale. Se usi i file, ovviamente è banale. Se usi le socket, già è diverso.

Se non c'è problema che siano programmi diversi, completamente separati, ovviamente puoi usare vari meccanismi di IPC.

Ma se, ipoteticamente, volessi creare un solo programma, usando più linguaggi, la cosa non è possibile in linea generale.

gabmac2
12-07-2020, 17:17
condivido il Tuo parere
nel dettaglio
ad esempio, un server con Python elabora dati
in specifiche situazioni o su richiesta di app o applicazioni su client, invia dati
una situazione di questo tipo

Kaya
13-07-2020, 07:51
Ovviamente il tutto dipende dalle necessità specifiche, ma se la metti così io metterei in ascolto python su porta 80 con https e aspetterei le chiamate http in cui mi passono ciò che mi serve (JSON o XML potrebbe essere il formato). In questo modo puoi usare il protocollo http per le risposte.

My 1/2 cent

pabloski
13-07-2020, 08:59
ad esempio, un server con Python elabora dati


Già usare il termine server, significa che hai stabilito un'architettura per il sistema. E hai deciso di avere un programma Python, che funge da server, raggiungibile via socket.


in specifiche situazioni o su richiesta di app o applicazioni su client, invia dati
una situazione di questo tipo

Dipende sempre dal contesto. Girerà su una macchina, mentre i client girano altrove? Girano tutti sullo stesso computer? C'è bisogno che il server prenda l'iniziativa per la connessione e semplicemente risponde passivamente alle richieste dei client?

E' necessario un canale di comunicazione a larga banda o sono accettabili gli overhead di comunicazioni tipici delle comunicazioni su socket?

gabmac2
13-07-2020, 09:11
girano su macchine diverse
sia rispondendo a domande sia attivamente
in ogni caso, mi sembra di intuire che la pensate indicativamente come me
JSON essendo uno standard dovrebbe "risolvere" un pò di problemi

Kaya
13-07-2020, 09:47
Json è uno standard su come inviare i dati. Ma lo è anche xml per dire, anche CSV se proprio.
Se poi ti piace Json, usalo! :)

pabloski
13-07-2020, 10:18
girano su macchine diverse
sia rispondendo a domande sia attivamente
in ogni caso, mi sembra di intuire che la pensate indicativamente come me
JSON essendo uno standard dovrebbe "risolvere" un pò di problemi

JSON è uno standard, testuale, leggibile dagli umani e con millemila librerie e supporto da parte di qualsiasi linguaggi esistente.

Non è il più efficiente però!

Come codifica per il trasferimento dati via rete, è tutto sommato anche la più indicata. Se il trasferimento avviene via file, pipe, memoria condivisa o altro, e c'è necessità di una codifica più compatta ed efficiente, è meglio guardare a codifiche binarie.

noblex
19-07-2020, 13:11
Se hai più componenti che devono comunicare tra loro, che sia sicuro o non sicuro, che sia sincrono o asincrono, che sia streaming o batch, vuoi essere agnostico rispetto a linguaggi e tecnologie.
Devi poter aggiungere, rimuovere, aggiornare o sostituire ciascun componente senza rogne sapendo che tutto il resto del sistema non è a conoscenza della modifica.

Non conosco il tuo use case, ma a naso ti direi di usare delle code (Kafka) per interconnettere i vari sistemi se si parla di un flusso di dati (streaming o meno) che deve passare attraverso i vari componenti in una pipeline di processamento e/o un Key/Value store (Redis, Ignite, Aerospike...) se la stessa roba deve essere acceduta più volte, magari in concorrenza.
A questo punto ti definisci la tua architettura decidendo che semantica di delivery ti serve e una volta definita l'architettura usi il linguaggio e le tecnologie che preferisci per ciascun componente tanto son tutti microservizi e ciaone