Quale tecnica utilizzare per aggiornare l'elenco degli articoli ordinati in un'architettura client-server?

0

In un'architettura client-server, quale tecnica viene utilizzata per aggiornare in modo efficiente l'elenco ordinato di elementi senza effettivamente inviare l'intero elenco?

Nota che più client aggiorneranno l'ordine dell'elenco simultaneamente e il server deciderà l'ordine corretto.

MODIFICA: per maggiore chiarezza.

Ad esempio, ho un'applicazione web della scheda kanban in tempo reale e tutti i partecipanti possono modificare l'ordine delle attività nelle colonne, ad esempio trascinandole. Voglio aggiornare l'ordine delle attività per tutti i clienti quando l'ordine cambia.

Stavo pensando di poter assegnare a ciascuna attività una proprietà, ad es. rank (float type) e poi quando cambia la posizione, posso aggiornare il suo rank in quanto tale:

thisTask.rank = (beforeTask.rank + afterTask.rank) / 2.0f

E quindi invia questo tag a tutti i client.

Ma vorrei sapere se esiste un modo più efficiente per farlo poiché questo metodo è limitato dalla sizeof (float) e potrebbe introdurre problemi con la risoluzione dei conflitti a livello di server.

    
posta Jake 31.07.2018 - 11:41
fonte

2 risposte

0

Puoi inviare l'intero elenco (non vuoi andare bene!) o ... .. crea un protocollo tra client e server.

Server al client
  send_full_list (se il nuovo client si connette o su richiesta del cliente)

send_deleted_item (passa il riferimento all'indice nell'elenco)

send_modified_item (passa il riferimento all'indice nella lista + cambia)

send_added_item (passa il riferimento all'indice nell'elenco in cui inserire)

Da client a server

please_send_full_list

Sia il client che il server avranno bisogno del codice per farlo funzionare. Hai bisogno di forti riconoscimenti per evitare che le cose non siano sincronizzate.

Un modo per i client di assicurarsi che il loro elenco non sia sincronizzato è che il server invia un hash o un CRC dell'elenco completo insieme a ogni modifica. Quindi il client può rigenerare il CRC nel suo elenco aggiornato e verificare la corrispondenza con ciò che il server ha inviato. Se NON lo stesso Cliente dovrebbe richiedere una nuova lista completa, altrimenti è sicuro che la sua lista aggiornata sia vera.

Tuttavia, è più semplice e sicuro inviare l'elenco completo, a meno che non sia MOLTO grande.

    
risposta data 31.07.2018 - 12:09
fonte
0

La risposta a questo dipende enormemente da come stai strutturando la tua applicazione di servizio web.

Ma se utilizzi REST e JSON, una scelta eccellente sarebbe quella di utilizzare la patch JSON oppure inserisci la descrizione del link qui

per es.

 curl -X PATCH -d '{ "op": "remove", "path": "/biscuits/0" }' URL'
 curl -X PATCH -d '{ "op": "add", "path": "/biscuits/1", "value": { "name": "Nut" } }'

Affrontare 'più client aggiornerà l'ordine dell'elenco simultaneamente' - con JSON Patch (e REST) puoi OTTENERE l'ETAG associato alla versione corrente del tuo 'array', e fare quegli aggiornamenti con un CONDITIONAL prefisso. per es.

PATCH /my/data HTTP/1.1
Host: example.org
Content-Length: 326
Content-Type: application/json-patch+json
If-Match: "abc123"

[
     { "op": "test", "path": "/a/b/c", "value": "foo" },
     { "op": "remove", "path": "/a/b/c" },
     { "op": "add", "path": "/a/b/c", "value": [ "foo", "bar" ] },
     { "op": "replace", "path": "/a/b/c", "value": 42 },
     { "op": "move", "from": "/a/b/c", "path": "/a/b/d" },
     { "op": "copy", "from": "/a/b/d", "path": "/a/b/e" }
]
    
risposta data 31.07.2018 - 15:54
fonte

Leggi altre domande sui tag