Costruire un solido sistema client-server robusto

2

Ho bisogno di aiuto per implementare un sistema pre-progettato che ha 4 componenti e diversi vincoli. Ho trascorso circa 50 ore cercando di determinare il modo migliore per costruire questo sistema; tuttavia, non credo di avere una soluzione abbastanza strong come al momento.

~~~ Le informazioni di base ~~~

Lo scopo di questo progetto è consentire ai proprietari di attività commerciali (e ai loro sviluppatori) di accedere ai dati in remoto. Ha 4 componenti.

  1. Un servizio Web
  2. Un cliente
  3. Un database per il servizio web
  4. Un database per il cliente

L'interfaccia utente deve essere sotto forma di servizio Web in quanto è uno dei requisiti di progettazione.

Il client è memorizzato su un computer di titolari di aziende (che ospita il loro database). È un programma locale programmato nella piattaforma .net.

I proprietari di attività accedono al servizio Web che accede a un client, alle richieste di dati e passa tali dati al client.

Quanto sopra è noto e immutabile (poiché non sono la persona che specifica le specifiche del progetto)

~~~ Il vero problema ~~~

Il problema è che il Cliente potrebbe non essere necessariamente nello stesso posto ogni volta, l'IP del cliente è soggetto a modifiche. Il Cliente potrebbe anche non essere online al momento della richiesta dal proprietario dell'attività commerciale.

~~~ La mia soluzione attuale ~~~

La soluzione My Present a questo problema è creare un server TCP / IP sul client. Quando il Client viene acceso o avviato, può "registrare" le sue credenziali del server TCP / IP (le informazioni necessarie per contattarlo) nel server insieme ad alcune informazioni di identificazione.

~~~ Editato per chiarezza ~~~ Quando il servizio Web riceve una richiesta, può aprire una connessione TCP / IP casuale e lasciare che il client (ricorda che il server TCP / IP si trova sul client) sappia che ha una richiesta di dati. Il Cliente può quindi ottenere la richiesta, elaborarla e inviare una risposta con un 'Id di richiesta'.

Sulla base di questo ID di richiesta, il servizio web può ricevere una chiamata, far sapere al client che ha una richiesta, il client può interrogare il servizio web per la richiesta, recuperare la richiesta, elaborare la richiesta e inviare una risposta indietro al servizio Web che può quindi elaborare la risposta (estrarre l'ID della richiesta da esso) e inviarla al chiamante del servizio Web appropriato.
~~~ End Edit ~~~ (wow quella frase è un boccone da leggere ad alta voce)

~~~ Cosa vorrei ~~~

Ritengo che la mia soluzione sia abbozzata e mi piacerebbe ricevere un riscontro sulle potenziali insidie che potrei non vedere e sui modi migliori per affrontarlo.

    
posta Aelphaeis 23.08.2013 - 16:37
fonte

1 risposta

0

Potrei essere tutto bagnato qui, ma sembra che il nocciolo del problema sia che devi avviare una comunicazione dal server al client.

La soluzione proposta (che non ti soddisfa) è quella di installare un server Web sul computer client (il laptop, nei miei commenti) e registrarne l'indirizzo IP con il tuo server principale.

Avere 2 o più server web parlano tra loro su una relazione tra pari è abbastanza comune e sembra funzionare bene. Il problema risiede nel fatto che tu sia a tuo agio con qualsiasi / tutte le infrastrutture necessarie per installare il secondo server web e farlo funzionare in modo affidabile e se avresti problemi con il firewall (molte aziende bloccano le richieste HTTP in entrata).

Un paio di altre idee vengono in mente:

  • Sondaggio semplice. Chiedi al tuo cliente di interrogare periodicamente il server principale. Non è una soluzione ideale (potresti avere migliaia di richieste di sondaggio per successo "hit"), ma potrebbe funzionare. la richiesta di sondaggio / risposta "no" potrebbe essere abbastanza economica da implementare e dovrebbe scalare bene.
  • Lungo polling - il tuo cliente richiede alcuni dati dal server. Se il server ha i dati, li restituisce. Se non ce l'ha, blocca o invia piccoli messaggi "keep alive" al client.

C'è una buona annotazione in questa domanda SO

Vedi anche la voce di Wikipedia sul sondaggio lungo

Non hai menzionato alcun problema di ridimensionamento: quanti clienti ti aspetti, quanto velocemente devono rispondere, quanto spesso inizieranno richieste, ecc. Queste risposte probabilmente impongono quale approccio è appropriato.

    
risposta data 23.08.2013 - 17:54
fonte

Leggi altre domande sui tag