Escludere destinatari di un evento
Se un client applica una modifica in modo ottimistico prima che il server la pubblichi, ricevere lo stesso evento può applicare la modifica due volte. Questo può causare uno sfarfallio o un elemento duplicato.
Passa l'ID di connessione del client che ha eseguito l'azione per consegnare l'evento a ogni altra connessione sottoscritta.
await bird.realtime.publish(appId, {
event: "message.created",
channels: ["presence-room-1"],
data: { body: "hello" },
exclude_connection_id: "26896.319537",
});client.realtime.publish(
app_id,
event="message.created",
channels=["presence-room-1"],
data={"body": "hello"},
exclude_connection_id="26896.319537",
)_, err := client.Realtime.Publish(context.Background(), appID, bird.RealtimePublishParams{
Event: "message.created",
Channels: []string{"presence-room-1"},
Data: map[string]any{"body": "hello"},
ExcludeConnectionID: "26896.319537",
})$bird->realtime->publish($appId, (new RealtimePublish())
->setEvent('message.created')
->setChannels(['presence-room-1'])
->setData(['body' => 'hello'])
->setExcludeConnectionId('26896.319537'));Ottenere l'ID di connessione
Il client legge il proprio ID di connessione e lo invia con la richiesta che attiva la modifica:
const bird = new BirdRealtime({ appKey: "your-app-key", region: "us1" });
await fetch("/messages", {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify({
body: "hello",
connection_id: bird.connection.connectionId,
}),
});let bird = BirdRealtime(options: .init(appKey: "your-app-key", region: "us1"))
var request = URLRequest(url: URL(string: "https://your-backend.example.com/messages")!)
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "content-type")
request.httpBody = try JSONSerialization.data(withJSONObject: [
"body": "hello",
"connection_id": bird.connectionId ?? "",
])
_ = try await URLSession.shared.data(for: request)val bird = BirdRealtime(BirdRealtimeOptions(appKey = "your-app-key", region = "us1"))
// Send the client ID with the HTTP client your app already uses.
api.postMessage(body = "hello", connectionId = bird.connectionId)L'ID è null finché la connessione non è stabilita e cambia dopo una riconnessione. Leggi bird.connection.connectionId nel browser o bird.connectionId in Swift e Kotlin quando effettui la richiesta.
Passa il valore a exclude_connection_id dopo averlo validato come dato di richiesta non attendibile. Questo campo può sopprimere la consegna a una connessione, ma non può concedere accesso a un evento.
Comportamento della connessione esclusa
Solo la connessione indicata viene esclusa. Le altre schede della stessa persona usano connessioni separate e ricevono comunque l'evento.
Escludere un ID di connessione che non è sottoscritto, o che non esiste più, non è un errore. La pubblicazione viene consegnata normalmente a tutti gli altri.
Quando omettere l'esclusione
Usa l'esclusione per le interfacce ottimistiche. Se il client attende l'evento prima di applicare una modifica, non escluderlo. Altrimenti la scheda che ha eseguito l'azione resta obsoleta.
Passi successivi
- Pubblicare eventi copre il resto del payload di pubblicazione, inclusi batching e broadcasting.
- Canali di presenza spiegano perché un membro può avere più connessioni.
- Pubblicare un evento è il riferimento completo per la richiesta.
Risorse correlate
Continua con la documentazione, le guide e gli esempi per questo argomento.