Mit POSIX message queues anstelle von TCP - sockets, wie Sie, um "Verbindung"?

Ich habe client-und server-Programmen, die jetzt die Kommunikation über TCP. Ich versuche mit POSIX message queues statt (in den Fällen, in denen der client und server auf der gleichen Maschine natürlich). Meine Hoffnung ist, dass die Leistung verbessert wird (insbesondere durch geringere Latenz).

Ich gearbeitet habe, die meisten davon, aber bin mir nicht sicher über eine Sache: wie schafft man die "Verbindung". Akzeptiert der server verbindungen von mehreren clients gleichzeitig, so bin ich versucht zu emulieren, die TCP-Verbindung herzustellen Prozess etwa so:

  1. Server öffnet eine queue mit einem bekannten Namen und liest es ständig (es kann select(2) wie bei TCP).
  2. Client öffnet drei queues: zwei mit frei wählbaren Namen (darunter einige Einzigartigkeit, wie PID, um Kollisionen zu vermeiden), und eine mit dem bekannten Namen, den der server verwendet.
  3. Client sendet eine "connect" - Meldung an der server-Warteschlange, einschließlich der client-queue-Namen (die eine ist bezeichnet für die client-zu-server-Datenverkehr und die andere für das Gegenteil).
  4. Server öffnet den Warteschlangen namens in der client-connect-Nachricht und beginnt zu Lesen (select) vom client-zu-server ein.
  5. Client schließt, der server-Warteschlange mit dem bekannten Namen. Zwei-Wege-Kommunikation erfolgt über die zwei Warteschlangen namens durch den Kunden (eine für jede Richtung).

Können Sie wahrscheinlich sehen, wie dieses Schema ist ähnlich wie eine gewöhnliche TCP-Methode, und das ist kein Zufall. Allerdings würde ich gerne wissen:

  1. Können Sie denken an einen besseren Weg, es zu tun?
  2. Sehen Sie alle potenziellen Probleme mit meiner Methode?
  3. Haben Sie noch andere Gedanken, auch über die Wahrscheinlichkeit, dass die Verwendung von message queues anstelle von TCP auf der gleichen Maschine wird tatsächlich verbessern, performance (Latenz)?

Beachten Sie, dass ich noch nicht verwendet POSIX message queues vor (ich habe IBM WebSphere MQ eine Weile zurück, aber das ist eher anders). Die Plattform ist Linux.

InformationsquelleAutor der Frage John Zwinck | 2009-01-03

Schreibe einen Kommentar