Portatile leggero C++ prese wrapper

Ho davvero pensato che questo potrebbe essere più facile da trovare…

Ho bisogno di un portatile c++ prese wrapper. Ho intenzione di usarlo per un applicazione windows server e un client che sarà in esecuzione su un dispositivo embedded in esecuzione ulinux (o qualcosa di simile). Vorrei utilizzare la Spinta, ma ho bisogno di essere leggero e facile da aggiungere al dispositivo embedded progetto.

Anche io vorrei che essere un “livello superiore” wrapper… inizia così un thread in background per leggere i dati, e lo informa di essere richiamata…

Tutte le idee?

  • Penso che la Spinta è abbastanza buono per voi.
  • Sono d’accordo con te, ma egli sarà probabilmente desidera che qualcuno per affrontare la sua paura che Aumentare.Asio non è “lightweight”.
  • IIRC, filettatura su Windows e Linux non è proprio la stessa cosa, quindi il cosiddetto “livello superiore wrapper” non è davvero un wrapper, ma pendente verso un quadro. Non credo che troverai qualcosa di prefabbricato che fa esattamente ciò che si vuole, così si potrebbe desiderare di scrivere il proprio. È quello che abbiamo fatto al lavoro (solo per i socket, nessun thread server), ed è stato tenuto bene (non si possono mettere qui a causa di problemi di licenza).
  • Le persone hanno sempre accuratamente selezionati con cura le parti di prestazioni che sono leggeri. Quali sono di solito proposto a una libreria di standard. asio è stato proposto in TR2, per quanto ne so. Si noti che vuole thread anche portabile.
InformationsquelleAutor rusbi | 2010-12-17



9 Replies
  1. 7

    Solo imparare ad usare la presa direttamente con le API. Si può quindi facilmente avvolgere se stessi. Non che duro, e si può iniziare con Beej ottima guida. Come Beej dice:

    Socket API, anche se ha iniziato da
    Berkeley folk, è stato portato a molti
    molte piattaforme, tra cui Unix, Linux,
    e anche in Windows.

    Nella sua guida ha dettagli molto piccola aggiunta che devi fare per ottenere le stesse API di Windows e sistemi *nix.

    Una volta che hai imparato, avvolgere tu, se sei così inclinato. Quindi è possibile controllare esattamente come “leggero” come si desidera.

    • So come usarlo… ma è un dolore nel *** 🙂
    • Questo è terribile per la consulenza. La BSD socket API è pieno di sorprendente insidie (ad esempio, dati OOB è rotto un hack poiché il TCP, che in realtà non lo supportano) ed è leggermente differente tra le diverse piattaforme. Cose che a prima vista può sembrare lo stesso su windows e linux finiscono per essere diverso in modo significativo il risultato finale di una maggiore sicurezza, bug o altri problemi, quando non esplicitamente preso in considerazione. Anche su sistemi Unix ci sono sottili variazioni nel modo in cui le API è implementato. Vedere la Programmazione di Rete Unix da Stevens per una discussione approfondita di questi problemi.
    • Sembra che dovrò scrivere il mio oggetto/wrapper, quindi mi segno questa come miglior risposta…
    • +1 per Beejs guida, è davvero un must have
    • Ho sviluppato un wrapper in C per me che uso in diversi progetti, per anni. E davvero è molto cupo fare che nel confronto con .NET, per esempio. È vero che ci sono molte insidie, incompatibilità e così via.
  2. 11

    Vorrei suggerire di Boost.Asio. Nonostante il nome, non si è costretti a utilizzare asincrona di I/O. Si potrebbe utilizzare/O sincrono e thread, come la tua domanda implica.

    Boost.Asio è un cross-piattaforma C++
    libreria di rete di basso livello e I/O
    di programmazione che fornisce agli sviluppatori
    coerente con un modello asincrono
    utilizzando un C++ moderno approccio.

    • Ho trovato la spinta per essere eccessivamente complesso per quello che dovrebbe essere un compito semplice.
    • Il problema è che utilizza un insolito paradigma di programmazione che, semplicemente, non è ben noto. Così a prima asio può sembrare complesso, ma se leggi il tutorial e l’introduzione, si scopre che in realtà è molto semplice e potente.
    • avete andato attraverso gli esempi? blocco eco client e server sono quanto di più semplice come si arriva. @Davis Re sono d’accordo con l’proactor modello applicato da operazioni asincrone non è troppo comune, ma la biblioteca non è la forza che il modello di suoi utenti. È possibile utilizzare in maniera sincrona troppo.
    • Prendere in considerazione di Aumentare leggero?
  3. 2

    Se davvero non ti piace la Spinta asio quindi come si potrebbe le basi di supporto in dlib. È più semplice, nel senso che utilizza il tradizionale blocco IO e i thread piuttosto che asio asincrono del proactor modello. Per esempio, rende più facile fare un thread di TCP server che legge e scrive da iostreams. Vedere questo esempio per esempio. Oppure si può semplicemente fare una semplice iosockstream se non agisce come un server.

  4. 1

    Dare un’occhiata a ENet http://enet.bespin.org/ è molto leggero e portatile, e funziona su UDP, con il supporto opzionale per affidabile pacchetti. È facile da usare, l’API di basso livello e con un po ‘ di prestazioni. Si dispone di un elevato grado di controllo sulla gestione della memoria, che potrebbe essere buona se la rete è un collo di bottiglia per voi e la malloc/nuova realizzazione si utilizza esegue male sotto il multithreading.

    Non sarebbe difficile implementare il livello elevato di thread “ottimale”, poiché non vi è il supporto opzionale per il blocco di ricezione e la biblioteca è una “libreria” e non un quadro, quindi, tu sei il decisore invece della biblioteca.

  5. 0

    Vecchia questione, ma per il C++, in stile BSD socket sincrona questo è il minimo bagaglio wrapper come si può trovare
    http://code.google.com/p/ting/source/browse/trunk/src/ting/net/

    Lo fa venire con le eccezioni di. Si potrebbe fare un po ‘più leggera come intestazione-solo libreria di modelli, e magari fare eccezioni facoltative, ma che avrebbe cambiato le API un po’

    POCO classi di rete sono molto simili, ma non richiedono più di dipendenze da altre parti del Poco lib

  6. -1

    C++CSP2

    Usato amato. Stabile e potente

    • Questa è una concorrenza biblioteca, che, mentre si può abstract connettività di rete, non fornisce direttamente wrapper c++ per la presa di connettività.

Lascia un commento