Ontvangers van events uitsluiten
Als een client een wijziging optimistisch toepast voordat je server deze publiceert, kan het ontvangen van hetzelfde event de wijziging dubbel toepassen. Dit kan een flikkering of een dubbel item veroorzaken.
Geef het connectie-ID van de acterende client mee om het event aan elke andere geabonneerde connectie te leveren.
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'));Het connectie-ID ophalen
De client leest zijn connectie-ID en stuurt het mee met het verzoek dat de wijziging triggert:
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)Het ID is null totdat de connectie tot stand is gebracht en verandert na een herverbinding. Lees bird.connection.connectionId in de browser of bird.connectionId in Swift en Kotlin wanneer je het verzoek doet.
Geef de waarde door aan exclude_connection_id nadat je deze als niet-vertrouwde verzoekdata hebt gevalideerd. Dit veld kan de levering aan één connectie onderdrukken, maar kan geen toegang tot een event verlenen.
Gedrag van uitgesloten connecties
Alleen de genoemde connectie wordt uitgesloten. De andere tabbladen van dezelfde persoon gebruiken afzonderlijke connecties en ontvangen het event gewoon.
Het uitsluiten van een connectie-ID dat niet geabonneerd is of niet meer bestaat, is geen fout. De publicatie wordt normaal aan alle anderen geleverd.
Wanneer je uitsluiting weglaat
Gebruik uitsluiting voor optimistische interfaces. Als de client op het event wacht voordat hij een wijziging toepast, sluit hem dan niet uit. Anders blijft het acterende tabblad verouderd.
Volgende stappen
- Events publiceren behandelt de rest van de publish-payload, inclusief batching en broadcasting.
- Presence-channels leggen uit waarom één lid meerdere connecties kan hebben.
- Een event publiceren is de volledige referentie voor het verzoek.
Gerelateerde bronnen
Ga verder met de documentatie, handleidingen en voorbeelden voor dit onderwerp.