Domanda

Sto cercando di scrivere un server di polling lungo basata su TCP personalizzato che servirà da intermediario per le altre connessioni TCP che richiedono più la persistenza di un telefono cellulare in grado di fornire.

Il modo in cui sto cercando di farlo sta scrivendo un server TCP asincrona in C # e una rete TCP client corrispondente anche scritto in C #.

Il modo in cui le opere di polling lungo (per quanto ho capito bene) è che si apre una connessione TCP a un server, e il server si ferma prima di inviare i dati indietro attraverso la presa di corrente. Si trova un intervallo di heartbeat che funziona su una rete di telefonia mobile (ho sentito che circa 8 minuti funziona?) E si invia un pacchetto vuoto se non ci sono dati aggiornati.

Questo è dove il mio problema entra in gioco. Non riesco a capire come “link” richiesta del mio cliente per i dati con un gestore di eventi in esecuzione sul server ...

Il flusso dovrebbe essere qualcosa di simile ( “client” è su un telefono):

  1. inizia l'utente la mia domanda

  2. Il client invia una richiesta di ricevere una notifica se i dati è cambiato

  3. Server “link” (registri) oggetto socket del cliente in un “gestore di eventi” che viene chiamato da altre connessioni TCP del server di cui ho parlato!

  4. Evento

    o Se viene attivato (nuovi dati è arrivato), inviare i dati al client

    o Se non viene attivato (nuovi dati), inviare un pacchetto “EmptyChanges” per cliente

  5. Client riceve i dati sul telefono e lo elabora (richiede un gestore di eventi in base al tipo di pacchetto che ha ricevuto e passa i “Dati” ha ottenuto dal server ad esso)

  6. Il client invia una richiesta di ricevere una notifica se i dati è cambiato

Quindi, il mio problema è che non riesco a pensare ad un progetto che porterà a compimento quello che voglio fare. Il problema è che io non so come fare # 3. Come faccio a “Link” gestore di un evento da un altro? E questi sono quasi sicuro che sia in esecuzione su diversi thread!

Quindi, la mia domanda sarebbe simile a questo (tutto psuedocodarlo):

Class AppClass
{
    Main()

    List<Client> clients;
    List<DataServers> dataServers;

    DataReceivedFromServer(Data stuff)
    {
    }

    MessageReceivedFromPhone(PhoneMessage pm, object sender)
    {
        //Loop here until HeartBeat interval reached
        Int totalTime = 0;
        While(totalTime < HEARTBEAT_INTERVAL)
        {
            If( ) // If we have received data from the server, and the client WANTED that data, send it now
            {
            }
        }
    }
}

Tipo di? Io voglio che sia evento guidato, ma sto avendo il tempo damndest capire come guidare l'applicazione con uno stile guidato PUSH rispetto a quello che ho "usato" per di Polling.

, essere gentile come potrei fare qualcosa di troppo complicato e stupido, perché questo è il mio primo vero tentativo di utilizzare la programmazione Socket (mai avuto bisogno) ed è particolarmente difficile a causa della natura di telefoni cellulari che sono su reti transitori e la mia del server che necessitano di mantenere la posizione di questi prodotti con una connessione TCP APERTO.

  

piattaforma server: Windows

     

Lingua Server: C #

     

piattaforma di test del client: Windows

     

Lingua Prova Cliente: C #

     

piattaforma client di destinazione: Windows Mobile 6.5, iPhone, Android (i clienti saranno scritti separatamente)

     

Target language client: C #, Obj-C o MonoTouch, Java

È stato utile?

Soluzione

Proprio chiunque chiedendo questo, ho cestinato l'idea di scrivere un server TCP personalizzato per gestire le mie connessioni. C'era così tanto in testa nel farlo, mi piacerebbe essere sostanzialmente replicando scrivere il mio server HTTP, così invece di fare questo, sono andato con il quadro Web Tornado in Python come il mio server e scrivo i servizi di back-end per comunicare tramite HTTP richieste in Web Tornado.

Invece di usare polling lungo a tutti, ho intenzione di utilizzare gli SMS per le notifiche push. Credo che tutte le principali piattaforme di telefonia implementare qualcosa di simile ad un Interceptor SMS che si scrive ... se uno SMS di un certo formato passa attraverso, verrà eseguito il codice personalizzato. Questo mi permette di rimuovere i requisiti di utilizzo di connessioni aperte coerenti (non per chat dal vivo, che utilizzeranno un lungo sondaggio stile cometa, ma la connessione non può che rimanere aperta se attivo per circa 5 minuti).

In sostanza, il quadro Web Tornado sta servendo come un bus Enterprise nella mia architettura.

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