Come scrivo un protocollo di messaggistica adeguato?

1

Ho bisogno di scrivere un protocollo di messaggistica tra client e server per un'applicazione di gioco. Ho bisogno di inviare messaggi avanti e indietro come, il giocatore si è unito a un gioco, il giocatore ha lasciato il gioco, il giocatore ha eseguito questa azione, ecc.

Ho una classe ClientMessage che costruirà un messaggio udp o tcp al client e invierà come testo normale per ora. Ma ovviamente, per il cliente, dovrebbe esserci un semplice protocollo per ogni tipo di messaggio (gli esempi sopra citati).

Non sono sicuro di dove cominciare come non ho mai dovuto fare. La mia unica idea è

// Player actions
private int playerJoinGame = 100;
private int playerLeaveGame = 101;

// Game events
private int gameStart = 200;
private int gameEnd = 201;

Quindi un messaggio sarebbe simile a

public PlayerJoinGame(string playerName){
   string msg = playerJoinGame + ',' + playerName;
   SendClientMessage(msg);
}

Questo schema di progettazione ha senso? L'unico modo per gestirlo, ovvero scrivere la risposta (client), è semplicemente diligente e assicurarsi che quando si aggiorna il codice del server, si aggiorni il cilent? (se gli ID evento cambiano).

Grazie.

    
posta user2410532 02.08.2015 - 00:22
fonte

2 risposte

3

Se vuoi un protocollo robusto in grado di gestire cose come un vecchio server che parla con un nuovo client per un po '(non è sempre possibile distribuire tutto in qualsiasi posto in un istante), i tuoi messaggi devono essere conformi a uno specifico, formato di dati dello schema che consente aggiornamenti compatibili con le versioni precedenti di detto schema.

Credo che XML e JSON siano i formati di dati più popolari su cui solitamente vengono costruiti tali protocolli (dove lavoro, ne usiamo entrambi). XML ha il vantaggio di un unico formato di schema standardizzato. JSON ha il vantaggio di essere generalmente meno prolisso. Se lo si desidera, è possibile specificare la propria grammatica context-free estremamente semplice e scrivere le proprie routine di parser / builder, ma probabilmente vale la curva di apprendimento iniziale per integrare alcune librerie di elaborazione XML o JSON esistenti. Sono sicuro che C # ne abbia molti.

    
risposta data 02.08.2015 - 00:46
fonte
4

Consiglierei ZeroMQ . Anche se non è così informativo come scrivere il tuo servizio di messaggistica, funziona bene fuori dalla scatola ed è disponibile praticamente per qualsiasi lingua che potresti nominare, C # incluso. È anche ampiamente utilizzato in modo da poter trovare supporto quando le cose vanno male o vuoi portare qualcun altro nel progetto.

Supporta un numero enorme di formati e protocolli di messaggistica, in modo che possa essere fatto funzionare per quanto tu desideri per la maggior parte. È anche asincrono che può essere un bel vantaggio quando hai un sacco di clienti.

    
risposta data 02.08.2015 - 01:01
fonte

Leggi altre domande sui tag