Feature #180
Updated by Marco Eichelberg 16 days ago
hierzu hatten wir vor längerer Zeit eine Diskussion, und ich habe auch mal angefangen, eine API zu implementieren, was aber nicht fertig geworden ist. Die Frage ist, wie man einen allgemeinen, plattformunabhängigen Mechanismus schaffen kann, um zwischen Prozessen Daten auszutauschen; basierend auf * Shared Memory * Semaphore, Mutex usw. * Signale (nur Unix) * Unix Domain Sockets * Named Pipes (nur Win32?) * ... Es gibt eine abstrakte Nachrichtenklasse: class OFIpcMessage: * virtual OFCondition encode(stream) = 0; * virtual OFCondition decode(stream, Uint32 len) = 0; * virtual Uint32 typeInfo() const = 0;\\ [Nachrichtentypen: static const Uint32 OMT_ShutDown = 1; ...] * virtual Uint32 length() const = 0; * virtual OFIpcMessage *clone() const = 0; Davon werden dann die konkreten Nachrichtenklassen abgeleitet. Das Nachrichtenformat, das über den Socket geschickt wird, sieht dann so aus (big endian byte order): * 0: Uint32 type; * 4: Uint32 msgID; * 8: Uint32 len; * 12: Uint8 payload[len]; Grundsätzliche Fragen zur Art der Kommunikation: 1) Richtung: * 1 Port pro Richtung * 1 Port für beide Richtungen 2) Ordnung: * point-to-point (1:1) * multi-point-to-point (m:1) * point-to-multi-point (1:n) * multi-point-to-multi-point (m:n) 3) Lebensdauer: * permanent * pro Nachrichtenpaar (RQ/RSP) 4) Threads: * multi * single + signal