Empfänger von Events ausschließen
Wenn ein Client eine Änderung optimistisch anwendet, bevor Ihr Server sie publiziert, kann der Empfang desselben Events die Änderung doppelt anwenden. Das kann ein Flackern oder ein doppeltes Element verursachen.
Übergeben Sie die Connection-ID des handelnden Clients, um das Event an alle anderen abonnierten Connections zu senden.
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'));Connection-ID abrufen
Der Client liest seine Connection-ID und sendet sie mit dem Request, der die Änderung auslöst:
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)Die ID ist null, bis die Verbindung aufgebaut ist, und ändert sich nach einem Reconnect. Lesen Sie bird.connection.connectionId im Browser oder bird.connectionId in Swift und Kotlin, wenn Sie den Request stellen.
Übergeben Sie den Wert an exclude_connection_id, nachdem Sie ihn als nicht vertrauenswürdige Request-Daten validiert haben. Dieses Feld kann die Zustellung an eine Connection unterdrücken, gewährt aber keinen Zugriff auf ein Event.
Verhalten bei ausgeschlossener Connection
Nur die benannte Connection wird ausgeschlossen. Die anderen Tabs derselben Person nutzen eigene Connections und empfangen das Event weiterhin.
Eine Connection-ID auszuschließen, die nicht abonniert ist oder nicht mehr existiert, ist kein Fehler. Das Publish wird normal an alle anderen zugestellt.
Wann Sie den Ausschluss weglassen
Verwenden Sie den Ausschluss für optimistische Oberflächen. Wenn der Client auf das Event wartet, bevor er eine Änderung anwendet, schließen Sie ihn nicht aus. Andernfalls bleibt der handelnde Tab veraltet.
Nächste Schritte
- Events publizieren behandelt den Rest des Publish-Payloads, einschließlich Batching und Broadcasting.
- Presence-Channels erklären, warum ein Mitglied mehrere Connections halten kann.
- Event publizieren ist die vollständige Referenz für den Request.
Verwandte Ressourcen
Weiter mit der Dokumentation, Anleitungen und Beispielen zu diesem Thema. Die Ressourcen sind auf Englisch.
Die Funktion erkundenRealtimeDem Lernpfad folgenBuild your first integrationImplementierungsleitfadenSend your first realtime event
Übung ausprobieren und ein Implementierungs-Briefing erhalten