Domanda

Sto cercando suggerimenti su possibili meccanismi IPC che sono:

  • Piattaforma incrociata (almeno Win32 e Linux)
  • Semplice da implementare C++ così come il linguaggi di scripting più comuni (Perl, Ruby, Python, ecc.).
  • Finalmente, semplice da usare dal punto di vista della programmazione!

Quali sono le mie opzioni?Sto programmando sotto Linux, ma mi piacerebbe che ciò che scrivo fosse portabile su altri sistemi operativi in ​​futuro.Ho pensato di utilizzare socket, pipe denominate o qualcosa come DBus.

È stato utile?

Soluzione

In termini di velocità, il miglior meccanismo IPC multipiattaforma saranno i pipe.Ciò presuppone, tuttavia, che tu voglia un IPC multipiattaforma sulla stessa macchina.Se vuoi essere in grado di parlare con processi su macchine remote, ti consigliamo invece di utilizzare i socket.Fortunatamente, se parli almeno di TCP, socket e pipe si comportano più o meno allo stesso modo.Sebbene le API per configurarli e collegarli siano diverse, entrambe agiscono semplicemente come flussi di dati.

La parte difficile, però, non è il canale di comunicazione, ma i messaggi che si passano attraverso di esso.Vuoi davvero guardare qualcosa che esegua la verifica e l'analisi per te.Ti consiglio di guardare su Google Buffer di protocollo.Fondamentalmente crei un file di specifiche che descrive l'oggetto che desideri passare tra i processi ed esiste un compilatore che genera codice in una serie di linguaggi diversi per leggere e scrivere oggetti che corrispondono alle specifiche.È molto più semplice (e meno soggetto a bug) che provare a creare un protocollo di messaggistica e analizzarlo da solo.

Altri suggerimenti

Per C++, controlla Aumenta l'IPC.
Probabilmente puoi anche creare o trovare alcuni collegamenti per i linguaggi di scripting.

Altrimenti, se è davvero importante potersi interfacciare con i linguaggi di scripting, la soluzione migliore è semplicemente utilizzare file, pipe o socket o anche un'astrazione di livello superiore come HTTP.

Perché non D-Bus?È un sistema di scambio di messaggi molto semplice che funziona su quasi tutte le piattaforme ed è progettato per essere robusto.A questo punto è supportato praticamente da tutti i linguaggi di scripting.

http://freedesktop.org/wiki/Software/dbus

Potresti provare YAMI , è molto semplice ma funzionale, portatile e viene fornito con l'associazione a poche lingue

Se desideri un prodotto portatile, facile da usare, multilingue e LGPLed soluzione, ti consiglierei ZeroMQ:

  • Incredibilmente veloce, scalabile quasi lineare e comunque semplice.
  • Adatto per sistemi/architetture semplici e complessi.
  • Sono disponibili modelli di comunicazione molto potenti:REP-REP, PUSH-PULL, PUB-SUB, COPPIA-COPPIA.
  • È possibile configurare il protocollo di trasporto per renderlo più efficiente se si passano messaggi tra thread (inproc://), processi (ipc://) o macchine ({tcp|pgm|epgm}://), con un'opzione intelligente per eliminare parte dei costi generali del protocollo nel caso in cui siano in esecuzione connessioni tra macchine virtuali VMware (vmci://).

Per la serializzazione suggerirei MessagePack o Buffer di protocollo (che altri hanno già menzionato), a seconda delle tue esigenze.

Che ne dite di La parsimonia di Facebook?

Thrift è un framework software per lo sviluppo scalabile di servizi multilingue.Combina uno stack software con un motore di generazione di codice per creare servizi che funzionano in modo efficiente e senza problemi tra C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk e OCaml.

Penso che vorrai qualcosa basato sui socket.

Se desideri RPC anziché solo IPC, suggerirei qualcosa come XML-RPC/SOAP che viene eseguito su HTTP e può essere utilizzato da qualsiasi linguaggio.

YAMI - Ancora un'altra infrastruttura di messaggistica è un framework di messaggistica e rete leggero.

Se sei disposto a provare qualcosa di leggermente diverso, c'è il GHIACCIO piattaforma da ZeroC.È open source ed è supportato praticamente da tutti i sistemi operativi immaginabili, oltre ad avere il supporto linguistico per C++, C#, Java, Ruby, Python e PHP.Infine, è molto facile da guidare (le mappature linguistiche sono personalizzate per adattarsi in modo naturale a ciascuna lingua).È anche veloce ed efficiente.Esiste anche una versione ridotta per i dispositivi.

Posso suggerirti di usare il plibsys Biblioteca C.È molto semplice, leggero e multipiattaforma.Rilasciato sotto la LGPL.Fornisce:

  • regioni di memoria condivisa denominate a livello di sistema (implementazioni System V, POSIX e Windows);
  • semafori denominati a livello di sistema per la sincronizzazione degli accessi (implementazioni System V, POSIX e Windows);
  • implementazione denominata del buffer condiviso a livello di sistema basata sulla memoria condivisa e sul semaforo;
  • socket (TCP, UDP, SCTP) con supporto IPv4 e IPv6 (implementazioni UNIX e Windows).

È una libreria facile da usare con una documentazione abbastanza buona.Poiché è scritto in C, puoi facilmente creare associazioni dai linguaggi di scripting.

Se è necessario trasferire grandi insiemi di dati tra processi (soprattutto se la velocità è essenziale) è meglio utilizzare la memoria condivisa per passare i dati stessi e i socket per notificare a un processo che i dati sono pronti.Puoi farlo come segue:

  • un processo inserisce i dati in un segmento di memoria condivisa e invia una notifica tramite un socket a un altro processo;poiché la notifica solitamente è molto piccola, il tempo impiegato è minimo;
  • un altro processo riceve la notifica e legge i dati dal segmento di memoria condivisa;successivamente invia una notifica che i dati sono stati riletti al primo processo in modo che possa fornire più dati.

Questo approccio può essere implementato in modo multipiattaforma.

Il calcolo distribuito è solitamente complesso e ti consigliamo di utilizzare librerie o framework esistenti invece di reinventare la ruota.I poster precedenti hanno già elencato un paio di queste librerie e framework.A seconda delle tue esigenze puoi scegliere un framework di livello molto basso (come i socket) o di alto livello (come CORBA).Non può esserci una risposta generica "usa questo".Devi istruirti sulla programmazione distribuita e quindi troverai molto più semplice scegliere la libreria o il framework giusto per il lavoro.

Esiste un framework C++ ampiamente utilizzato per il calcolo distribuito chiamato ACE e CORBA ORB TAO (che è basato su ACE).Esistono ottimi libri sull'ACE http://www.cs.wustl.edu/~schmidt/ACE/ quindi potresti dare un'occhiata.Occuparsi!

Non c'è niente di più semplice che usare le pipe, che sono supportate su tutti i sistemi operativi che conosco e sono accessibili praticamente in ogni lingua.

Guardare Questo tutorial.

Socket TCP su localhost FTW.

Python ha una libreria IPC piuttosto buona:Vedere https://docs.python.org/2/library/ipc.html

Xojo ha il supporto IPC multipiattaforma integrato con il suo Classe IPCSocket.Anche se ovviamente non potresti "implementarlo" in altre lingue, potresti usarlo in un'app della console Xojo e chiamarlo da altre lingue rendendo questa opzione forse molto semplice per te.

I protobuf di Google sono davvero una pessima idea se vuoi un codice facile da mantenere ed eseguire il debug.è troppo facile per le persone abusarne e usarlo per inquinare il tuo codice.i file proto sono carini, ma fondamentalmente è la stessa cosa di un file di intestazione della struttura, e il codice che genera è una schifezza completa che ti fa chiedere se sia davvero uno strumento di attacco segreto per sabotare progetti software invece di automatizzarli.Dopo averlo utilizzato per un po', è quasi impossibile rimuoverlo dal codice.è meglio usare semplicemente un file di intestazione di strutture di formato fisso di cui è possibile eseguire facilmente il debug.

se hai davvero bisogno di compressione, passa a una mappatura di indirizzi/dati delle strutture di archiviazione da remoto...allora i pacchetti sono solo un insieme di coppie indirizzo/dati...inoltre una struttura molto semplice da automatizzare con i propri script Perl che producono codice leggibile dall'uomo e di cui è possibile eseguire il debug

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top