2012-12-20 13 views
7

Domanda riveduta:Qualcuno può spiegare meglio Decoder/Encoder?

Ok, quindi sto cercando di incorporarlo nel mio gioco personalizzato. Capisco il processo di connessione di Netty Server e Client. Capisco anche come i decoder e gli encoder funzionano in teoria. Ma ecco cosa vorrei ancora capire.

processo server mio:

Server boots up -> Client starts 
Client requests connection -> Server accepts 
Server instructs client connection is good -> Client continues to the login screen 
(Ignoring any type of security protocol) 
Client sends username and password over Channel 
Server gets username and password checks it in the database or file 
Server pushes -> yes or no 
if yes Server sends player stats 
if no Server creates new player 

Dopo quel processo so che ho bisogno di avere un gestore di mondo in modo che tutti è vedere gli aggiornamenti in tempo quasi reale. Ora non so come implementare i decoder per questa roba.

Mi piacerebbe molto vedere alcuni esempi con alcune spiegazioni su come sono implementati. preferibilmente con alcune istruzioni .... Nota: non sto dicendo di risolvere questo problema per me ma mostrami come gestire le diverse informazioni. Buone pratiche e standard per favore ...

+0

Vorrei aggiungere che sto facendo riferimento alla Netty API e al modo in cui utilizza i decodificatori e gli encoder in realtà ... Mi sembra che la guida non fornisca dettagli sull'implementazione dei propri decoder e su come .. Anche io voglio ribadire come ho detto quest'ultima volta. Ho continuato a battermi per un po 'e non riesco a capire questo ... – Maxs728

risposta

7

Invio il this tutorial per la vostra considerazione.

Non tentare di darti in pegno, ma ho cercato di spiegargli questi esatti misteri.

E 'il secondo di una serie, si potrebbe anche voler read the first one.

+0

Sto ancora leggendo il tuo contenuto e tornerò più tardi con una decisione ... – Maxs728

+0

Ho letto tutto in questo e anche se sì, è un'informazione molto utile che è stata anche molto teorica e non fornisce molti esempi di codice e cose del genere ... Dà una grande comprensione di come funziona. Grazie! Ma mi rimane ancora una domanda importante .... Come implementate i vostri decoder/codificatori? – Maxs728

3

Le persone scrivono i propri codificatori/decodificatori (codec) perché Netty non impone né definisce un protocollo a livello di applicazione, in modo che sia libero di scrivere il proprio protocollo. Il set di codec che definisci è un protocollo che può essere qualsiasi cosa tra String based e alcuni formati binari come Protobuf, ad esempio. Netty fornisce i codec per la tua comodità (quelli che hai usato sono esempi).

Suppongo che ciò consenta di interrompere anticipatamente lo streaming?

Di solito, quando si inviano/ricevono flussi, è necessario scomporre che su un fisso pezzi di lunghezza (chiamato frame). Un approccio popolare, che è stato utilizzato sin dagli albori di Internet, è quello di utilizzare la lunghezza del blocco (di solito un 4 byte int) come il primo campo letto dal flusso. Quindi se il valore del primo int è 20 allora si sa che i seguenti 20 byte sono il carico utile (i dati) e il 21 ° byte è il primo byte di un'altra lunghezza. Il vantaggio di questo approccio è che consente blocchi di lunghezza variabile. Ma tu non sei limitato a questo. Ad esempio, se si pianifica di scrivere un protocollo che utilizza stringhe con lunghezza predefinita (con padding), si scriverà o, meglio ancora, si useranno i codec attuali di Netty ad esso appropriati.

volta, ho implementato un protocollo con tre decodificatori che svolgerà in questo ordine:

  1. ricevere un flusso e si decompongono in frame di lunghezza prefissata;
  2. convertire ciascun frame in una stringa;
  3. usa libray Jackson per convertire una stringa in un oggetto Java predefinito.

Gli encoder eseguivano solo le stesse operazioni, ma all'indietro. Sfortunatamente, ho perso il codice originale, ma lo riscriverò presto.

Ma come fa il torrente sa che il flusso è una stringa o una serie di int di o una serie di doppi? Come fai a dire che la differenza è la domanda?

Risposta breve: non lo so. Devi codificare queste informazioni nei codec. Ad esempio, è possibile utilizzare un codice operativo come primo campo nel payload che indica che il carico utile è Stringhe, doppi, intarsi o qualsiasi combinazione di entrambi.

Fondamentalmente, Netty fornisce un flusso e sei libero di decodificare come preferisci. Ad esempio, se stai leggendo una serie di long (8 byte), allora stai andando a scrivere un codec che legge 64 byte alla volta dal flusso perché ognuno rappresenta un singolo lungo. Netty fornisce i codec out-of-box in modo che non sia necessario reinventare la rotella ogni volta.

+0

grazie che ha un senso e lo chiarisce un po '... In affitto mi fa capire che ho avuto la giusta impressione di come funziona ... – Maxs728

Problemi correlati