Was ist besser für lokale IPC-, POSIX-Nachrichtenwarteschlangen (mqueues) oder Unix-Domain-Sockets (local)?

Ist es besser, POSIX-Nachrichtenwarteschlangen oder Unix-Domain-Sockets für die lokale IPC-Kommunikation zu verwenden?

Ich habe mit Unix-Sockets zwischen Computern (nicht Domänen) gearbeitet und erinnere mich, dass das Herstellen und Unterbrechen der Verbindung dazu führen würde, dass Sockets eine Weile verweilen, bevor sie endgültig verschwinden. Wenn Sie einen "zuverlässigen" Austausch wünschen, müssen Sie entweder TCP verwenden oder die Anwendung so gestalten, dass eine ACK zurückgegeben wird. Ich bin mir nicht sicher, ob dies auch für Unix-Domain-Sockets gilt.

In meinem aktuellen Projekt benötigen wir einen lokalen IPC. Meine erste Reaktion war die Verwendung von POSIX MQueues, da ich sie zuvor für lokales Messaging verwendet habe. Ein Mitarbeiter schlägt jedoch stattdessen Unix-Domain-Sockets vor.

Ist einer besser als der andere oder ist es eine Frage der Programmiervertrautheit? Oder hängt es vielleicht von der Anwendung ab, die erstellt wird?

Auf den ersten Blick folgt die Anwendung, an der wir arbeiten, einem Client / Server-Modell. Die Clients senden Nachrichten an den Server, um "etwas zu tun". Der Client wartet jedoch nicht auf die Antwort "Fertig", obwohl er wissen möchte, ob seine Anfrage eingegangen ist oder nicht.

Die grundlegende Logik für die Sendeseite lautet:

connect to server
send request
note if the send worked or not
disconnect from server

Der Server kann Hunderte von Clients enthalten.

Wir führen die Ausführung auf einem SMP-System (4-8 Kerne) aus, auf dem das Linux-Betriebssystem ausgeführt wird.

Danke im Voraus

Antworten auf die Frage(6)

Ihre Antwort auf die Frage