j4nk3y: Node.js + socket.io, Cluster / Multithreading

Beitrag lesen

problematische Seite

Moin,

Tipp ins Blaue: Deine Umgebungsvariablen werden nicht an die Kind-Prozesse weitergegeben, deswegen lauschen die Http-Server auf den Port 1337 und nicht auf process.env.PORT. Lösen könntest du das, indem du beim Forken die Umgebungsvariablen manuell durchreichst: cluster.fork(process.env).

Hm... Ne funktioniert leider nicht, var port ist aber auch 1337 und nicht process.env.port, Müsste ich eh rausnehmen, da der Client sich zu Port 1337 verbinden möchte. Wie dem auch sei, habe ich mir gerade mal für beide Fälle das Server-Object per Console ausgeben lassen. Mit einem interessantem Unterschied:

Server {
  domain: null,
  _events:
   { connection: [Function: connectionListener],
     listening: [ [Function], [Function: bound ] ],
     close: [Function: bound ],
     upgrade: [Function],
     request: [Function] },
  _eventsCount: 5,
  _maxListeners: undefined,
  _connections: 0,
  _handle: null,
  _usingWorkers: false,
  _workers: [],
  _unref: false,
  allowHalfOpen: true,
  pauseOnConnect: false,
  httpAllowHalfOpen: false,
  timeout: 120000,
  keepAliveTimeout: 5000,
  _pendingResponseData: 0,
  maxHeadersCount: null,
  [Symbol(asyncId)]: -1 }

Das kommt bei der Cluster Methode.

Und bei der alten Methode zusätzlich diese Zeile: _connectionKey: '6::::1337', und danach [Symbol(asyncId)]: 6 }

Interessant aber viel kann ich mit der Information gerade nicht anfangen.

Jein, Threads haben in der Regel einen gemeinsamen Speicherbereich, aber cluster.fork erzeugt ganz neue Prozesse, die haben völlig getrennte Speicherbereiche. Du könntest aber die Arbeit die im User-Modul stattfindet nur im Master-Prozess erledigen lassen, und die Worker über die Ergebnisse per worker.send informieren. Das ist aber ganz schönes Gefrickel und du verlierst einige Vorteile der Parallelisierung, weil die Synchronisations-Punkte zwischen deinen Prozessen einbaust.

Ja, das habe ich mich auch schon fast gedacht. Das wäre denke ich zu kompliziert nachträglich noch zu realisieren.

Hm, ganz unterschiedliche Prozesse ist Schlecht... Obwohl kann mir egal sein, solange die wichtigen Daten richtig geschickt werden. Das sollte ich leicht hinkriegen.

Gruß
Jo