Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > General Coding
You last visited: Today at 19:25

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



IPC Pipes : Client - Server

Discussion on IPC Pipes : Client - Server within the General Coding forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Mar 2010
Posts: 360
Received Thanks: 132
IPC Pipes : Client - Server

Hey,

Ich habe einen Server (QApplication Gui) und 1-10 Clients (DLL QCoreApplication)
die Clients detouren send() und recv().
Die Clients müssen untereinander kommunizieren, also habe ich auf pipes zurückgegriffen.

Wie realisiert man den Datenverkehr über pipes am besten ?

Möglichkeit 1:
Ich sende alle Daten von recv() über die Pipe zum Server und der Server verarbeitet diese Daten und reagiert entsprechend.
Evtl 4 Pipes ? _SEND_IN, _SEND_OUT, _RECV_IN, _RECV_OUT ?

Möglichkeit 2:
Die Auswertung von recv() findet im Clienten statt.
Dazu müsste der Server dem Clienten mitteilen, was genau bei welchem Packet passieren soll. Anschließend muss der Client reagieren und ggf. eine Nachricht an den Server schicken.

Ich tendiere zu Möglichkeit 1.. weniger Aufwand aber größerer overhead.
Wie würdet ihr sowas realisieren ? Evtl sogar über eine andere Variante ?
Daifoku is offline  
Old 09/12/2015, 18:37   #2
 
elite*gold: 0
Join Date: Feb 2009
Posts: 1,137
Received Thanks: 572
Ich würde schlicht weg gar nicht mit Pipes arbeiten, Pipes sind langsam wie sonst was.

Ich würde Shared Memory nehmen und die Synchronisation über Semaphores regeln. Ich habe das zwar bisher nur auf POSIX Systemen gemacht, sollte aber auch unter Windows möglich sein. Etwa so (Pseudo):
Code:
//shared semaphores
semaphore writeable;
semaphore server_readable;
semaphore client_readable;

//Natürlich noch initialisieren der semaphores etc
//Initialisierung: 
//       writeable: 1
//       server_readable: 0
//       client_readable: 0

...

// Client recive:
// Warten bis Memory frei zum schreiben ist
wait(writeable);
writedata(shared_mem_pointer, data); //Daten in shared Memory block schreiben
//server bescheid geben er soll arbeiten
signal(server_readable);
//warten bis server fertig ist
wait(client_readable);
readdata(shared_mem_pointer, &data_processed)
//Memory frei
signal(writeable);
//Daten wurden verarbeiten

...

// Server
//warten bis daten ankommen
wait(server_readable);
// daten verarbeiten
processdata(shared_mem_pointer);
// client sagen dass die Verarbeitung fertig ist
signal(client_readable);
warfley is offline  
Thanks
1 User
Old 09/12/2015, 22:13   #3
 
elite*gold: 0
Join Date: Mar 2010
Posts: 360
Received Thanks: 132
Nun gut, das beantwortet meine Frage indirekt. Also möglichst keine unnötigen Daten senden.

QtSharedMemory und QtLocalServer arbeiten laut einem Test einer dritten Person mit fast identischer Geschwindigkeit ;-) Daher spare ich mir die Umstellung von Pipes auf SharedMemory und sende nur wenige Signale.

Wenn ich mal mehr Zeit haben sollte, kann ich immer noch wechseln. Habe meine Pipe Klasse schön geschrieben, dass ich sie relativ "leicht" an SharedMemory anpassen kann
Daifoku is offline  
Reply


Similar Threads Similar Threads
Shell -> Pipes
04/30/2015 - C/C++ - 0 Replies
Hey, bin zur Zeit dabei eine eigene Shell zu schreiben. Hänge im Moment ein bisschen bei den Pipes: Das grundlegende Modell der Shell sieht so aus, dass erstmal der Befehl eingelesen wird und dann in einer 2dimensionalen Liste gespeichert wird. In etwa so: http://i.epvpimg.com/93Ebd.png
Named Pipes Security
11/17/2014 - CO2 Private Server - 7 Replies
Hello, I have a doubt about Named Pipes, i am trying to implement this on the source i am building so both, Login and MsgServer can exchange data easily. The named pipe data can be easily intercepted? I mean, peoples can get what i'm sending and receiving without troubles? I will setup an username and password to authenticate, so should i encrypt the data?
[C++/Vb.net] Pipes
05/23/2012 - General Coding - 0 Replies
Hallo ich versuche eine Pipe Verbindung zwischen c++ und vb.net herzustellen, aber leider bekomme ich keine verbindung, hier der code: c++ client #include <windows.h> #include <stdio.h> #include <iostream> using namespace std; LPCWSTR GetPipeName()
[C++] Interprozesskommunikation: Windows Pipes
04/10/2012 - Coding Tutorials - 4 Replies
Abend liebe Community, Ich habe hier ein sehr interessantes Thema für euch: Kommunikation zwischen zwei Prozessen auf dem selben Computer. Das heißt, wie können zwei Programme, die auf einem System laufen, Daten untereinander austauschen? Dazu gibt es erstmal mehrere Möglichkeiten und ich habe mir da jetzt mal die Pipes rausgepickt. Die Frage, was ein Pipe ist, lasse ich mal durch Wikipedia klären. Dazu bitte HIER mal nachschauen. Um für euch den Umgang mit den Pipes einfach zu gestalten...
Get into Mana Pipes
05/11/2007 - WoW Exploits, Hacks, Tools & Macros - 6 Replies
Heya lovely people of xxxxx I was looking a bit around, and noticed quite a few bugs/exploits concentrates around the "Auto-Unstuck" feature. So I thought " wonder if you can get int othe mana pipes in Netherstorm", and I did get into them :P 1. Simply, just drop down infront of one. http://images7.pictiger.com/images/39/142e...5f34 f223039.jpg 2. Use the Auto-Unstuck feature, found under GM help issues (Subject: "Stuck")



All times are GMT +2. The time now is 19:25.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.