2015-09-01 30 views
6

Używam C++ MFC.Najlepszy sposób komunikacji między aplikacjami do jednej aplikacji

Zastanawiam się, co jest najlepszym sposobem komunikowania się między aplikacjami X do jednego wniosku, że zachowują się jak „Menedżer aplikacji”

Zastanawiam używać SendMessge (Win32 API) i nie wiem, czy istnieje lepszy sposób to zrobić (jak gniazda)

Chciałbym uzyskać kilka sugestii na temat tego problemu. Zalety i wady są mile widziane!

Dzięki

+1

Czy twoje aplikacje komunikują się przez sieć, nie musisz brać pod uwagę gniazd, chyba że to prawda. – john

+1

Wygląda na to, że struktura serwera/klienta jest zbyt duża. Zajrzyj do gniazdek lub GSOAP (również używają gniazd). – Blacktempel

+2

Jeśli 'SendMessage' robi to, czego potrzebujesz, po prostu użyj tego. Coś jeszcze zwiększy złożoność twojego programu. – paddy

Odpowiedz

6

Twoja aplikacja ma strukturę C/S. Aplikacja X to klient, a menedżer aplikacji to Serwer. można użyć bazy danych, SendMessage i gniazdo do komunikacji między S i C

Mapowanie 1. SendMessage/skrzynek mailslot/Rury/File/Shared Memory

  • Zalety: łatwy do wdrożenia
  • Wady : C i S powinny znajdować się w tym samym środowisku (PC). C i S należy zaimplementować w systemie Windows. I nie ma historii nagrywania.

2. DataBase

  • Zalety C oraz S mogą być rozmieszczone w różnych środowiskach i może być realizowane w różnych językach programowania. A Ty możesz śledzić historię komunikacji .
  • Wady: potrzeba więcej wysiłku, aby zaimplementować.

3. Gniazdo

  • Zalety C oraz S mogą być rozmieszczone w różnych środowiskach i może być realizowane w różnych językach programowania.

  • Wady: trzeba więcej wysiłku, aby zaimplementować.

Zazwyczaj DB & Gniazdo jest do kompleksowej komunikacji/logicznego projektowania oprogramowania, które potrzebują zapis historii. I możesz wybrać SendMessage, jeśli twoja komunikacja nie jest zbyt skomplikowana.

+1

Dzięki !, SendMessage czy szybciej niż Sockets? Jeśli np. Wiadomości wysyłane do menedżera co 10ms (z każdej aplikacji) wydajność wysyłania wiadomości zmniejszy się, moja aplikacja zawiesi się? –

+3

Powinieneś dodać [Pipes] (https://msdn.microsoft.com/en-us/library/windows/desktop/aa365780.aspx) i prawdopodobnie [Mailslots] (https://msdn.microsoft.com/pl -us/library/windows/desktop/aa365576.aspx) do listy. – IInspectable

+1

Idealnie SendMessage będzie szybszy niż Socket. Ponieważ dane wysyłane przez SendMessage nie łączą się z operacją czasu sieciowego, taką jak protokół sieciowy. A jeśli menedżer nie przetworzy wiadomości szybko, aplikacja zawiesi się. Możesz użyć PostMessage, aby zignorować proces komunikatów menedżera oczekującego. – ybdesire