[Alpha]{class="badge informative"}

Istanze e richieste

In un browser, ogni caricamento di pagina avvia una nuova copia del Web SDK che serve un singolo visitatore. Un server è diverso. Un processo a esecuzione prolungata gestisce le richieste di più visitatori, spesso contemporaneamente. Il Server SDK separa il lavoro che viene eseguito una volta per ogni processo dal lavoro che avviene per ogni richiesta del visitatore:

  • Una volta per processo: crea un’istanza e chiama configure all’avvio del server.
  • Una volta per richiesta: chiama forRequest per ottenere un handle con ambito per il visitatore che ha effettuato la richiesta, quindi chiama metodi come sendEvent su tale handle.

Configurare una volta all’avvio del server configure-once

Crea un’istanza e configurala prima che il server inizi ad accettare le richieste. Attendi la risoluzione di configure, perché forRequest genera un errore se lo chiami prima del termine della configurazione.

import { createInstance } from "@adobe/alloy-node";

const alloy = createInstance();

await alloy.configure({
  datastreamId: "ebebf826-a01f-4458-8cec-ef61de241c93",
  orgId: "ADB3LETTERSANDNUMBERS@AdobeOrg",
  edgeCredentials: {
    clientId: process.env.ADOBE_CLIENT_ID,
    clientSecret: process.env.ADOBE_CLIENT_SECRET,
    scopes: process.env.ADOBE_SCOPES.split(",")
  }
});

Se configure rifiuta, ad esempio perché un’opzione non è valida, l’istanza rimane non configurata e forRequest continua a generare finché non viene eseguita una chiamata a configure.

Richiama richiesta per ogni richiesta for-request

Per ogni richiesta in ingresso, chiamare forRequest e passare l’oggetto della richiesta in ingresso. L’handle restituito ha gli stessi metodi dell’istanza, tranne configure e forRequest.

Nell’esempio seguente viene utilizzato il modulo predefinito node:http di Node.js. Lo stesso modello funziona con qualsiasi framework che ti fornisca l’oggetto di richiesta in ingresso, ad esempio Express o Fastify.

import { createServer } from "node:http";

createServer(async (req, res) => {
  const visitor = alloy.forRequest({ request: req });

  try {
    await visitor.sendEvent({
      xdm: {
        eventType: "web.webpagedetails.pageViews",
        identityMap: {
          Email: [{ id: "visitor@example.com", primary: true }]
        }
      }
    });
  } catch (error) {
    console.error("Failed to send event to Adobe", error);
  }

  res.end("OK");
}).listen(3000);

Se il runtime o il framework trasmette un’API di recupero Request al gestore e prevede un Response in cambio, utilizza lo stesso pattern. Registra il gestore nel modo in cui il runtime o il framework richiede:

async function handleRequest(request) {
  const visitor = alloy.forRequest({ request });

  try {
    await visitor.sendEvent({
      xdm: {
        eventType: "web.webpagedetails.pageViews",
        identityMap: {
          Email: [{ id: "visitor@example.com", primary: true }]
        }
      }
    });
  } catch (error) {
    console.error("Failed to send event to Adobe", error);
  }

  return new Response("OK");
}

Ogni handle è supportato dalla propria istanza di SDK configurata con le stesse opzioni passate a configure. Gli handle non condividono tra loro lo stato del visitatore, pertanto l’identità o il consenso di un visitatore non possono sfuggire alla richiesta di un altro visitatore.

Il passaggio di request consente al SDK di inoltrare le intestazioni del visitatore, come User-Agent, Accept-Language e X-Forwarded-For, all’Edge Network. Vedi Intestazioni contestuali e inoltrate.

Cosa è condiviso e cosa è per richiesta scope

Stato
Portata
Dettagli
Configurazione
Processo
Impostato una volta da configure. Ogni handle utilizza la stessa configurazione.
Token di accesso
Processo
SDK richiede un token di accesso da Adobe la prima volta che ne ha bisogno, quindi lo riutilizza per ogni handle fino a poco prima della scadenza. Vedi Autenticazione.
Servizi di rete, runtime, legacy e globali
Processo
Gestisce il riutilizzo dei servizi Platform passati a createInstance, a meno che non vengano sostituiti in forRequest.
Identità (ECID) e consenso
Visitor
Lettura da e scrittura nel servizio cookie passato a forRequest.
Archiviazione
Richiesta
Ogni handle ottiene un nuovo archivio in memoria a meno che non si passi un servizio storage a forRequest.
Intestazioni di richiesta
Richiesta
Leggi da request che passi a forRequest.

Identità e consenso tra le richieste identity

SDK memorizza l’ECID del visitatore e le preferenze di consenso in cookie, nello stesso modo in cui lo archivia il Web SDK. Su un server, SDK legge e scrive questi cookie tramite un servizio cookie, che passi a forRequest come proprietà cookie.

  • Se non passi un servizio cookie, ogni handle inizia con un archivio cookie in memoria vuoto. Edge Network assegna un nuovo ECID a ogni richiesta e il consenso impostato con setConsent non viene ricordato per la richiesta successiva del visitatore.
  • Se trasmetti gli stessi dati cookie a ciascuna richiesta di un visitatore, SDK invia l’identità memorizzata ad Edge Network, in modo che il visitatore mantenga lo stesso ECID. Anche le preferenze di consenso vengono riportate.

SDK non include un servizio cookie che legge e scrive le intestazioni HTTP Cookie e Set-Cookie. Per mantenere l’identità e il consenso di un visitatore in tutte le richieste, fornisci la tua implementazione dell’interfaccia del servizio cookie. Consulta Servizi Platform.

NOTE
Gli eventi inviati da sendEvent devono includere un'identità primaria in xdm.identityMap, indipendentemente dal fatto che venga passato o meno un servizio cookie. Il solo ECID non soddisfa questo requisito.

Evita l’istanza di livello principale per il traffico del visitatore top-level

È possibile chiamare metodi come sendEvent direttamente sull’istanza restituita da createInstance. Questa operazione è utile per testare la configurazione o per inviare eventi che non appartengono a un visitatore specifico. Tuttavia, l’istanza di primo livello mantiene un singolo archivio di cookie in memoria per la durata del processo. Ogni chiamata effettuata condivide la stessa identità, indipendentemente da quale visitatore l’abbia attivata. Utilizza invece un handle forRequest per ogni richiesta del visitatore.

recommendation-more-help
experience-platform-help-collection