Excluir destinatarios de eventos
Si un cliente aplica un cambio de forma optimista antes de que tu servidor lo publique, recibir el mismo evento puede aplicar el cambio dos veces. Esto puede provocar un parpadeo o un elemento duplicado.
Pasa el ID de conexión del cliente que actúa para entregar el evento a todas las demás conexiones suscritas.
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'));Obtener el ID de conexión
El cliente lee su ID de conexión y lo envía con la solicitud que desencadena el cambio:
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)El ID es null hasta que se establece la conexión y cambia tras una reconexión. Lee bird.connection.connectionId en el navegador o bird.connectionId en Swift y Kotlin cuando hagas la solicitud.
Pasa el valor a exclude_connection_id después de validarlo como datos de solicitud no confiables. Este campo puede suprimir la entrega a una conexión, pero no puede otorgar acceso a un evento.
Comportamiento de la conexión excluida
Solo se excluye la conexión indicada. Las demás pestañas de la misma persona usan conexiones separadas y siguen recibiendo el evento.
Excluir un ID de conexión que no está suscrito, o que ya no existe, no es un error. La publicación se entrega normalmente a todos los demás.
Cuándo omitir la exclusión
Usa la exclusión para interfaces optimistas. Si el cliente espera el evento antes de aplicar un cambio, no lo excluyas. De lo contrario, la pestaña que actúa permanece desactualizada.
Próximos pasos
- Publicar eventos cubre el resto del payload de publicación, incluidos el agrupamiento y la difusión.
- Canales de presencia explican por qué un miembro puede tener varias conexiones.
- Publicar un evento es la referencia completa de la solicitud.
Recursos relacionados
Continúa con la documentación, guías y ejemplos de este tema.