Domanda

Sto costruendo un app Objective-C che ha sia un server e un client. Il cliente può inviare gli aggiornamenti al server, e il server deve essere in grado di inviare gli aggiornamenti a ogni client connesso. Ho pensato al modo migliore di implementare questo sistema, ma chiedo per i vostri suggerimenti.

Al momento, sto pensando che, quando sono disponibili nuovi aggiornamenti, il server utilizzerà le discussioni per inviare l'aggiornamento per ogni cliente a sua volta. Se un client è scaduto, sono scollegati. Ho poca esperienza in rete, in modo da chiedo la vostra comprensione.

Pensi che questo sistema avrebbe funzionato bene? Se è così, avete qualche suggerimento su come fare la filettatura? Tutte le classi NS mi può puntare a? Ci deve essere una specie di coda posso usare, sto pensando.

Altri pensieri?

EDIT: Non mi aspetto il conteggio cliente di ottenere molto al di sopra di 50 o giù di lì, al massimo

.
È stato utile?

Soluzione

Fino a quando sia client che server sono applicazioni OS X ed entrambi possono essere scritti in Objective-C utilizzando i quadri di cacao, mi raccomando di dare un'occhiata al Distributed oggetti tecnologici (DO) a Cocoa. Non cercherò di dare un tutorial in oggetti distribuiti qui, basta a spiegare perché potrebbe essere utile ...

DO maniglie dettagli asincrona della rete per voi (tutti gli aggiornamenti del client potrebbe accadere su un singolo thread). Inoltre la semantica di comunicazione con un oggetto remoto (client al server o viceversa; DO è bidirezionale volta stabilita la connessione) sono molto simili alla comunicazione in-process. In altre parole, una volta che si ha un riferimento all'oggetto remoto (in realtà un NSDistantObject che funge da proxy per l'oggetto all'altro capo della connessione), il codice cliente può inviare messaggi al oggetto remoto come se fosse locale:

[remoteServer update:client];

dal client o

[[remoteClientList objectAtIndex:i] update:server];

dal server. Lascio i dettagli della configurazione del collegamento e per ottenere il remoteServer o riferimento remoteClient a voi dopo aver letto il noreferrer oggetti distribuiti Programming guide .

Lo svantaggio di usare DO è che si sono legati al cacao; sarà molto difficile da scrivere un client non-cacao o server che comunica utilizzando Distirbuted oggetti. Se c'è una possibilità che si consiglia di avere non cacao client o server implementazioni, non si dovrebbe usare DO. In questo caso, mi sento di raccomandare qualcosa di semplice con un sacco di cross-platform e supporto per la lingua. Un API REST-style su HTTP è una buona opzione. Dai un'occhiata al cacao URL Caricamento sistema documentazione per informazioni su come implementare le richieste HTTP e le risposte. Dai un'occhiata alla CocoaHTTPServer codice di esempio di Apple o di un progetto di code.google.com stesso nome per informazioni sull'implementazione di un server HTTP nel codice di cacao.

Come ultima opzione, si può dare un'occhiata al cacao Streaming Guida di programmazione se si desidera implementare il proprio protocollo di rete. sottoclassi di NSStream vi permetterà di ascoltare in una presa di rete e gestire asincrone legge / scrive a / da quella presa. Un sacco di persone usano AsyncSocket per questo scopo. Avvolge il (di livello inferiore) CFStream e CFSocket e rende la scrittura di codice di rete po 'più facile.

Altri suggerimenti

Quando il server invia gli aggiornamenti ai clienti, probabilmente sarebbe più facile avere appena tutti maneggiare un filo, e basta usare prese asincrone. Naturalmente questo dipenderà da quanti clienti avete dovuto affrontare anche.

Ci sono diversi esempi di rete nel lato sviluppatori Apple. Uno mi sento di raccomandare che si estrae è l'Urlcache, che può essere scaricato. Citando la documentazione di Apple per questo esempio:

  

urlcache è un'applicazione per iPhone di esempio che illustra come scaricare una risorsa dal web, memorizzarlo nella directory dei dati dell'applicazione, e utilizzare la copia locale della risorsa. Urlcache dimostra anche come implementare un paio di politiche di caching:

Un'opzione interessante è la BLIP protocollo da Jens Alfke . E 'come una versione ridotta di BEEP : un sistema di networking messaggio orientato. Esso fornisce sostanzialmente le astrazioni di basso livello per un tubo messaggio bidirezionale in modo da poter concentrarsi sulla stratificazione vostro protocollo di comunicazione su di esso.

Ha alcuni seguaci degni, come Marcus Zarra (autore del CoreData bibbia) e Gus Mueller di Flying software di carne.

Non so come si prevede di progettare il vostro sistema, ma di solito un server non può connettersi a un cliente; il cliente deve avviare la comunicazione. Con un limite minimo di 50 clienti, non si può guardare un web-server / client di attuazione simile ...

Detto questo, ci sono fondamentalmente due modi per gestire la comunicazione client-server: 1. I sondaggi client al server periodicamente per ottenere gli aggiornamenti 2. Il cliente mantiene una connessione aperta al server e il server risponde con un ben noto (come in entrambi i lati lo capiscono) protocollo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top