Italian community of Lazarus and Free Pascal

Programmazione => Componenti Aggiuntivi => Topic aperto da: DragoRosso - Dicembre 09, 2021, 07:02:42 pm

Titolo: Indy o Synapse ?
Inserito da: DragoRosso - Dicembre 09, 2021, 07:02:42 pm
Salve,

fermo restando che io uso Indy per le librerie di rete o i Socket direttamente, voi che cosa usate come componenti per la comunicazione TCP/IP ?

Non solo per l'HTTP, ma anche per l'FTP, per il TCP o l'UDP, Broadcast, etc ....

Ho sentito parlare ma non conosco le librerie Synapse. Le conoscete ?
Come sistemi operativi, compatbilità con (in ordine di importanza) Android, Windows, Linux, Mac.

Ciao ciao
Titolo: Re:Indy o Synapse ?
Inserito da: nomorelogic - Dicembre 09, 2021, 07:33:31 pm
Synapse a differenza di Indy punta sui blocking sockets.
Secondo l'autore infatti la richiesta non dovrebbe essere asincrona ma sincrona e dovrebbe essere un thread apposito ad occuparsi della sua gestione.

Per maggiori informazioni si può leggere qua
http://synapse.ararat.cz/doku.php/about (http://synapse.ararat.cz/doku.php/about)

Importante notare è che sul loro sito, l'ultima stable è datata 2012 ma gli sviluppi sono andati avanti sempre, c'è infatti un repository svn aggiornato.

Edit:
per quello che ne so io è una libreria molto valida
essendo scritta in Free Pascal non mi stupirebbe se girasse su tutti gli OS target
http://synapse.ararat.cz/doku.php/features (http://synapse.ararat.cz/doku.php/features)
Titolo: Re:Indy o Synapse ?
Inserito da: DragoRosso - Dicembre 09, 2021, 08:16:24 pm
@nomorelogic
Grazie per le info, ho dato una veloce occhiata (ci ho trovato anche dei file di Indy ....  ;D ).

Edit: Jedi .... non Indy ....

L'uso della tecnologia di blocking effettivamente può avere un senso in alcuni scenari, nei mie mi sono già adattato mentalmente alle comunicazioni asincrone e lavorare ad "eventi" mi sembra la cosa più naturale.
Anche se si impostano più "Thread bloccanti" per le comunicazioni, comunque un regista ci deve essere, e questo non può essere "bloccato" in genere ....

Il vecchio (anzi antico) polling o l'evento (che è un polling mascherato alla fin fine) vanno più che bene per me.

Ciao ciao.
Titolo: Re:Indy o Synapse ?
Inserito da: DragoRosso - Dicembre 09, 2021, 11:45:39 pm
per quello che ne so io è una libreria molto valida
essendo scritta in Free Pascal non mi stupirebbe se girasse su tutti gli OS target
http://synapse.ararat.cz/doku.php/features (http://synapse.ararat.cz/doku.php/features)

Indy gira su tutti i target indicati, Synopse non è indicato se gira su Android e su Mac.
Comunque che sia valida è certo. Avevo letto anche io le "features" e diciamo coprirebbero a 360 gradi le mie esigenze.
Prossimamente proverò ad usarlo. Devo verificare anche il porting di alcuni componenti derivati da Indy, come il ModBus.

Su Indy avevo anche sviluppato un server FTP che uso nei miei sistemi, anche questo da verificare il porting.

L'unica cosa che mi lascia perplesso, è il "blocking". In un mondo che è "event drive", sembrerebbe quasi un ritorno alle origini.

Un porting di un progetto probabilmente riuscirà a illuminarmi  8) .

Ciao
Titolo: Re:Indy o Synapse ?
Inserito da: nomorelogic - Dicembre 10, 2021, 12:23:53 am
il concetto dovrebbe essere che è il thread che si occupa di una determinata operazione ad essere sincrono
in questo scenario, in effetti, per fare più comunicazioni contemporanee bisogna lanciare più thread mentre quello principale resta libero

direi che è interessante come approccio e soprattutto, in teoria, non fa una piega


Titolo: Re:Indy o Synapse ?
Inserito da: DragoRosso - Dicembre 10, 2021, 12:57:45 am
il concetto dovrebbe essere che è il thread che si occupa di una determinata operazione ad essere sincrono
in questo scenario, in effetti, per fare più comunicazioni contemporanee bisogna lanciare più thread mentre quello principale resta libero

direi che è interessante come approccio e soprattutto, in teoria, non fa una piega

Si e no, dipende a che comunicazioni ti riferisici. Se come spiegato dall'autore, l'esempio è di comunicazione "punto /punto" con schema "richiesta / risposta" allora sono concorde, ma non ci sono solo questi scenari.

Ad esempio io uso alcune tecniche di broadcasting (che non è il multicasting) per sincronizzare alcune attività su dispositivi di rete, e devo trasmettere uno più comandi in broadcast, e ricevere un numero indefinito di risposte. Il tutto in asincrono. Farlo in sincrono non sarebbe in alcun modo possibile, perchè non è dato sapere a priori se ci sarà una risposta, ne quante risposte eventuali potranno arrivare.

Inoltre, per quanto di mia conoscenza, non è possibile aprire un broadcast sulla stessa NIC e sulla stessa porta da più socket "contemporaneamente" ... a meno di non usare driver multiplex che esistono su Windows ma non su Android, e dubito anche su Mac o Linux.

E' per questo che ho qualche perplessità, però finchè non provo non posso certo dire che non funzionerà.

La soluzione c'è l'ho, lo già sviluppata ed è operativa da anni. Però avere un panorama di soluzioni con diversi prodotti è la cosa migliore.

Ciao
Titolo: Re:Indy o Synapse ?
Inserito da: xinyiman - Dicembre 11, 2021, 01:24:57 pm
Io ho usato entrambi, devo dire che indy ha già un sacco di cose pronte. Mentre synapse è più flessibile, in quanto ti fai tutto tu.