JavaScript Hintergrundprozess laufen lassen?

2 Antworten

Wozu dauerhaft laufen lassen? Du sagst, der Client drückt einen Button, und dann soll im Browser auf dem Server etwas passieren. Du kannst doch in der Sekunde, wo die Anfrage des Clients rein kommt, den Browser starten.

Den Browser dauerhaft laufen lassen würde nur Sinn machen, wenn manche Client Requests von vorherigen abhängen (die Seite im Browser also dauerhaft laufen muss), oder das Starten des Browsers ziemlich lange dauert. In dem Fall würde ich wahrscheinlich zu WebSockets via socket.io greifen.

In Node.js initialisiert du in der main.js (oder wie auch immer deine Startdatei heißt) eine "globale" Puppeteer-Instanz mittels puppeteer.launch(). Sobald der Browser gestartet wurde, startest du einen socket.io Server. Mit diesem kommuniziert dann der Client. Wenn der Client also über socket.io einen Befehl X gibt, kannst du auf dem Server damit den Browser steuern.

Wenn es unbedingt eine REST API und kein WebSocket Server sein muss, geht das im Prinzip genauso: Eine globale Puppeteer-Instanz initialisieren und den Express-Routen (oder welches Framework man auch immer nimmt für die REST API) diese als Parameter übergeben.

Solang der WebSocket (oder Express) Server läuft, bleibt auch die Puppeteer-Instanz offen.

Die socket.io Variante grob zusammen geschustert (keine Garantie für Funktionalität):

const server = require('http').createServer();
const io = require('socket.io')(server);
const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://somepage.com');

  io.on('connection', client => {
    client.on('event', data => {
      page.type('.some-field', 'Some text')
    });
    /* ... */
  });

  server.listen(3000);
})();
Woher ich das weiß:Berufserfahrung – Inhaber einer App-Agentur & 15+ Jahre Programmiererfahrung
apsks000 
Fragesteller
 28.10.2022, 22:25

Manche Client requests hängen vom vorherigen ab

0
BeamerBen  28.10.2022, 22:29
@apsks000

Sollte relativ einfach machbar sein da was zu coden, da JS single threaded ist (pro Context)

0
apsks000 
Fragesteller
 28.10.2022, 22:26

Danke, hast du es selber getestet?

0

Events + Event handler? 

Ansonsten können Worker so was.

Woher ich das weiß:Berufserfahrung – Privat und beruflich damit zu tun