Domanda

Devo impostare un protocollo per interazioni comando / risposta veloci. Il mio istinto mi dice di abbattere un semplice protocollo con stringhe ASCII separate da CRLF come il funzionamento di SMTP o POP3 e di effettuare il tunneling tramite SSH / SSL se ho bisogno che sia protetto.

Mentre potrei semplicemente fare questo, preferirei basarmi su una tecnologia esistente in modo che le persone possano usare una libreria amichevole piuttosto che l'interfaccia della libreria socket che il sistema operativo offre loro.

Ho bisogno di ...

  • Comandi e risposte che passano avanti e indietro i dati strutturati. (XML, espressioni S, non importa.)
  • La possibilità per il server di inviare notifiche non pianificate al client senza essere interrogato.

Qualche idea per favore?

È stato utile?

Soluzione

AMQP sembra promettente. In alternativa, penso che XMPP supporti gran parte di ciò che vuoi, anche se con un po 'di sovraccarico.

Detto questo, a seconda di ciò che stai cercando di realizzare, un semplice protocollo ad hoc potrebbe essere più semplice.

Altri suggerimenti

Se vuoi solo richiesta / risposta, HTTP è molto semplice. È già un protocollo di richiesta / risposta. Il lato client e server sono ampiamente implementati nella maggior parte delle lingue. Il ridimensionamento è ben compreso.

Il modo più semplice per usarlo è di inviare comandi al server come richieste POST e che il server rispedisca la risposta nel corpo della risposta. Potresti anche estendere HTTP con i tuoi verbi, ma ciò renderebbe più efficace il lavoro per sfruttare i proxy di cache e altre infrastrutture che capiscono HTTP.

Se si desidera ricevere notifiche asincrone, osservare i protocolli pub / sub (Spread, XMPP, AMQP, implementazioni JMS o broker commerciali pub / sub messaggi come TibcoRV, Tibco EMS o Websphere MQ). Il protocollo o l'implementazione da scegliere dipendono dall'affidabilità, dalla latenza e dalle esigenze di throughput del sistema che stai costruendo. Ad esempio, è possibile che le notifiche vengano eliminate quando la rete è congestionata? Cosa succede alle notifiche quando un client è offline? Vengono scartate o messe in coda quando il client si riconnette.

Che ne dici di qualcosa come SNMP? Non sono sicuro che si adatti esattamente al modello utilizzato dalla tua app, ma supporta sia la notifica asincrona che il pull (ovvero TRAP e GET).

Questa è una grande domanda con un numero enorme di variabili da considerare, e la domanda ha menzionato solo alcune di esse: formato del pacchetto, messaggistica asincrona vs. sincronizzata e sicurezza. Ce ne sono molte, molte altre alle quali si potrebbe pensare. Ti suggerisco di passare attraverso una descrizione dello stack di protocollo a 7 livelli (OSI / ISO) e chiederti di cosa hai bisogno in quei livelli e se vuoi costruirlo o ottenerlo da qualche altra parte. (Sembri principalmente interessato ai livelli 6 e 7, ma hai anche citato parti di livelli inferiori.)

Pensa anche se si tratta di un'applicazione critica per la sicurezza o di parte di un sistema con V & amp; V formale. I sistemi di comunicazione veramente buoni e affidabili non sono facili da progettare; anche un "poco potente" il protocollo può comportare un sacco di oneri di codifica sull'applicazione per eseguire il ripristino degli errori.

Infine, suggerirei di esaminare come altre applicazioni simili alla tua fanno il lavoro (controlla open source, leggi libri, ecc.). Utile anche il database dell'Ufficio Brevetti USA, ecc .; si possono ottenere grandi idee solo leggendo la descrizione del problema di comunicazione che stavano cercando di risolvere.

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