PDA

Visualizza la versione completa : [c++]db,soket e serializzazione


giuseppe500
21-11-2009, 21:18
Ciao.
Vorrei creare due programmi sulla stessa macchina che si scambiano dei dati nel modo piu veloce possibile.
Da quello che ne so bisognerebbe utilizzare le socket ammesso che si possa(questo lo chiedo a voi).
Mi serve per trasferire mesh da blender un programma di grafica opensource di cui sono disponibili i sorgenti alla mia applicazione mfc.
non so pero' alcune cose:
1)quanto e se le soket possono essere piu' veloci di un db tipo sql lite.
2)Bisogna serializzare i dati in memoria prima di inviarli con le socket?
2-1)è possibile serializzare i dati in modo binario(il modo piu veloce) in c++,intendo senza boost che mi sembra un po troppo vasto per l'uso che devo fare, e chiedo anche se utilizzare boost possa rallentare in qualche maniera il mio progetto(un piccolo engine 3d).
grazie.

senise
22-11-2009, 02:20
Vorrei creare due programmi sulla stessa macchina che si scambiano dei dati nel modo piu veloce possibile.


Per lo scambio di dati puoi sicuramente utilizzare i socket.
Potresti utilizzare anche un'area di memoria RAM condivisa e accessibile da entrambi i processi. (memory-mapped file).
Qual'è il modo più veloce possibile è difficile a dirsi e dipende dai dati e da cosa devi fare.
In linea di principio credo che dovrebbe essere il memory-mapped file.

giuseppe500
22-11-2009, 20:09
hai un link o della documentazione da consaigliarmi?
Poi penso che serva una serializzazione binaria per poter far si che quello che un applicazione scrive sia comprensibile a chi legge o no?
ad es ho la stessa classe Cdata in tutte e due le applicazioni che contine il mio formato raw per gli shader che lo renderizzano ecc..., e voglio passare un oggetto di questa classe "riempito" all' applicazione B che contiene la stessa classe CData , come funziona a quasto punto ? devo deserializzare dall' area di memoria condivisa?
Grazie.

senise
23-11-2009, 18:41
ad es ho la stessa classe Cdata in tutte e due le applicazioni che contine il mio formato raw per gli shader che lo renderizzano ecc..., e voglio passare un oggetto di questa classe "riempito" all' applicazione B che contiene la stessa classe CData , come funziona a quasto punto ? devo deserializzare dall' area di memoria condivisa?


Se l'area di memoria è condivisa, la seconda applicazione dovrebbe accedervi e basta per utilizzare l'oggetto.
Non ho mai usato la tecnica di condivisione di memoria tra processi, so solo che esiste questa possibilità.

La serializzazione/deserializzazione riguarda l'invio di oggetti su socket.
Un buon punto di partenza secondo me è questo:

http://www.parashift.com/c++-faq-lite/serialization.html#faq-36.6

giuseppe500
24-11-2009, 20:08
scusate , ma esistono funzioni gia ' fatte in stl per serializzare i container come il vector o map?
O bisogna farsele a "manina"?
grazie.

shodan
24-11-2009, 20:26
bisogna farsele a "manina"

Loading