Dipende. Dimentica le tecnologie coinvolte per un po 'e concentrati sulle tue specifiche esigenze di comunicazione. Spero non ti dispiaccia se esploro anche alcuni punti correlati.
- Point-to-point (P2P) di flusso: Sappiamo che questo uno - due piani, come lei ha ricordato.
- p2p mode: Half o Full-duplex? I dati verranno scambiati simultaneamente oppure è sempre un meccanismo di risposta ai messaggi?
- Stato: è possibile che il codice attenda una risposta, anche se la maggior parte dello scambio è asincrona. Lo scambio è assolutamente asincrono? la sincronizzazione? misto? Questo punto è strettamente correlato al precedente.
- Trasmissione: scoppi di dati o flussi costanti?
- Larghezza di banda: Quanti byte/sec prevedi di trafficare? È una percentuale considerevole della rete di destinazione (wireless? Mobile? Hi-speed?)
- Contenuto affidabile/inaffidabile: la perdita di un pacchetto di dati genera lo stato del cliente in disordine? (Questa non è una cosa negativa di per sé, solo una specifica.)
Se il codice richiede qualsiasi tipo di contenuto sincrono, potrebbe essere necessario un controllo del flusso di risposta sul codice e una struttura di messaggistica di alcuni ordina dove i messaggi hanno un ID e possono avere un ID messaggio originale a cui sono una risposta. Ciò ti aiuterà a controllare il contenuto anche su protocolli asincroni. In questo caso, un protocollo facilmente gestibile come JSON può essere migliore, come @JustLogin menzionato.
Full-Duplex significa che stai mettendo in scena più dati sul tuo livello rete/interprete e probabilmente dovrà gestire le comunicazioni asincrone.
Se le prestazioni sono un problema, e in base alle specifiche, quindi proposte come quella realizzata da @Viacheslav possono essere interessanti. Un protocollo personalizzato può essere fortemente ottimizzato, al costo della maintanability e della portabilità (diverse lingue hanno il proprio interprete JSON, mentre gli interpreti personalizzati possono aver bisogno di essere implementati o incapsulati, aggiungendo strati al processo e quindi riducendo le prestazioni o richiedendo la conversione del codice.)
Se non si può fregare di meno se un pacchetto o due sono persi, allora UDP può essere una soluzione praticabile. Meno controllo di TCP significa un protocollo più leggero, ma non si è mai sicuri che i dati abbiano raggiunto l'altro lato a meno che non si implementi il proprio controllo.
TL; Versione DR: attenersi ai protocolli standard di basso livello come JSON, anche se aggiungono un sovraccarico.