Kommunikation mellem to applikationer

Tags:    c++ delphi

Hej.

Hvordan får man to applikationer til at kommunikere med hinanden?
Jeg har hørt om enkelte buzz-words som shared memory, pipes, o.l., men hvordan benytter man sig af alt dette.

Jeg kunne forestille mig noget med at de hver især benyttede sig af en communication-class, som jeg har lavet. De skal så blot have en reference til den samme communication-class der ligger et bestemt sted i RAM'en (som de begge kan tilgå - shared memory?). Problemet er vel egentlig blot at de bliver enige om denne adresse (reference).

En helt anden løsning, som jeg dog synes er alt for besværlig, er at lave en uafhængig applikation, som står for kommunikationen. Det kunne f.eks. være en slags server, som begge applikationer connectede til.

Indtil videre skal jeg kun bruge det til nogle Windows applikationer, men hvis det også virker i *nix har jeg overhovedet ikke noget imod det.

På forhånd tak!

/ Bjarke

--------------------------------------------------
[THIS IS A SIGNATURE VIRUS! PLEASE COPY IT INTO YOUR OWN SIGNATURE(S)]
--------------------------------------------------



6 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 4 karma
Sorter efter stemmer Sorter efter dato
Hvis hastigheden ikke er så nødvendig kan du jo bruge en 'socket'-fil. Dvs. de to programmer deles om en fil som de med faste intervalder læser/flusher. Metoden bruges nogle gange til noget lowlevel databaseudvikling, sådan lidt 'indtil vi har fundet noget bedre'.
Ellers ved jeg at MySQL kan bruge named pipes, så du kan måske sniffe i deres source code og få gode idéer der.

- karmazilla -



Siden du er på Win32 har du sandsynligvis et vindue. Sådan et kan du sende en message til.
Du kan også memory-mappe en fil og på den måde få et "snyde" delt område i lageret.
Eller du kan, som du selv nævner, bruge named pipes.
Hvor meget information skal du sende og hvor hurtigt skal det gå?



Siden du er på Win32 har du sandsynligvis et vindue. Sådan et kan du sende en message til.
Du kan også memory-mappe en fil og på den måde få et "snyde" delt område i lageret.
Eller du kan, som du selv nævner, bruge named pipes.
Hvor meget information skal du sende og hvor hurtigt skal det gå?


Jeg har intet vindue :-)

Det er et web-system - dvs. jeg har en process som kører X antal threads der hver modtager en HTTP request til et givent tidspunkt. Disse threads behandler de modtagede data og sender alt videre til en "server" jeg har lavet (den kører som en NT service) og modtager herefter svar igen, hvad den skal sende til brugerens browser af output. Så det skal blot gå så hurtigt som muligt - og ja.. det er vel i kB-størrelse af mængder data der overføres ad gangen.

Det kunne være rart med en direkte adgang til noget delt hukommelse.

Lyder spændende med at memory-mappe en fil - hvordan gør man det?

/ Bjarke

--------------------------------------------------
[THIS IS A SIGNATURE VIRUS! PLEASE COPY IT INTO YOUR OWN SIGNATURE(S)]
--------------------------------------------------



MSDN har eksempler her:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/base/file_mapping_examples.asp

Jeg har ikke selv prøvet det så jeg skal ikke kunne sige om det egner sig.
Her er i øvrigt beskrivelser af andre måder at kommunikere mellem processer på:
http://msdn.microsoft.com/library/en-us/ipc/base/interprocess_communications.asp




MSDN har eksempler her:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/base/file_mapping_examples.asp

Jeg har ikke selv prøvet det så jeg skal ikke kunne sige om det egner sig.
Her er i øvrigt beskrivelser af andre måder at kommunikere mellem processer på:
http://msdn.microsoft.com/library/en-us/ipc/base/interprocess_communications.asp


Oh... mange tak for de links. Jeg syntes nu ellers jeg havde søgt på MSDN, men havde vist ikke lige fundet ovenstående. Mange tak!

RPC ser bare utrolig spændende ud, men jeg tvivler på at det er godt til mit formål. Jeg tror valget falder på file mapping.

Måske man burde opfinde noget a la RPC med høj performance, som kan bruges til alle applikationer lokalt. Det kunne være genialt. Den skulle så benytte sig af en f.eks. file mapping e.l. hurtig IPC.

/ Bjarke

--------------------------------------------------
[Var til LotR 1+2+3 den 16. dec 2003 16.15]
--------------------------------------------------



Hvis du har fået svar på dit spørgsmål, eller ikke har brug for svaret længere, så luk venligst denne tråd.



/AC



t