2013-04-28 12 views
5

Stiamo scrivendo gioco multiplayer online in Flash desiderio lato server .Net, abbiamo bisogno canale duplex quindi la comunicazione è effettuata utilizzando i socket.Server - C#, client - Flash, protocollo di scambio dati

Puoi dirmi alcune best practice sul protocollo/formato di scambio di dati tra server e client? IMO uno di buona scelta può utilizzare la serializzazione JSON.

risposta

3

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.

3

Penso che JSON possa essere la scelta migliore e lasciami spiegare perché.

In primo luogo, il traffico di gioco serializzato JSON è ponderato in base alla ligth, poiché la notazione JSON è come "nome: val", non come "<name> val </name>".

In secondo luogo, la serializzazione JSON è la più intuitiva per i giochi. Le notazioni XML e XML sono buone per i dati multilinea, ma i valori delle variabili di gioco sono solitamente piuttosto brevi (HP, mana, AP, danno, ecc.) E possono essere descritti con una sola riga.

In terzo luogo, Actionscript 3 (spero che non si scriva MMO in AS2) ha strumenti perfetti per la decodifica/codifica JSON. Anche gli strumenti di analisi XML sono buoni, ma IMO, JSON sono migliori. Inoltre, in Flash 11+, le operazioni JSON sono estremamente ottimizzate.

In quarto luogo, molti progetti a carico elevato utilizzano cache server con MongoDB e il suo formato principale è BSON (Binary JSON), quindi l'utilizzo di JSON in questo caso semplifica la comunicazione dei dati tra DB e tutto il resto.

3

La buona soluzione è un protocollo proprietario perché fornirà prestazioni perfette e ottimizzazione del traffico.

Abbiamo provato i diversi protocolli per cercare quello migliore per il nostro poker online.

Il risultato della ricerca è il protocollo seguente:

I primi due byte è un tipo di pacchetto. I secondi due byte del pacchetto sono la dimensione del pacchetto. Il corpo del pacchetto N

  1. Carica i 4 byte iniziali dal socket per ottenere dimensioni e tipo di pacchetto.
  2. pacchetto Load corpo
  3. corpo Invia pacchetto per elaborare al gestore tipo di messaggio
Problemi correlati