Excluindo destinatários de eventos
Se um cliente aplica uma alteração de forma otimista antes de o servidor publicá-la, receber o mesmo evento pode aplicar a alteração duas vezes. Isso pode causar uma oscilação visual ou um item duplicado.
Passe o ID de conexão do cliente que realizou a ação para entregar o evento a todas as outras conexões inscritas.
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'));Obter o ID de conexão
O cliente lê seu ID de conexão e o envia junto com a solicitação que dispara a alteração:
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)O ID é null até que a conexão seja estabelecida, e muda após uma reconexão. Leia bird.connection.connectionId no navegador ou bird.connectionId em Swift e Kotlin ao fazer a solicitação.
Passe o valor para exclude_connection_id após validá-lo como dado de solicitação não confiável. Esse campo pode suprimir a entrega para uma conexão, mas não pode conceder acesso a um evento.
Comportamento da conexão excluída
Apenas a conexão indicada é excluída. As outras abas da mesma pessoa usam conexões separadas e ainda recebem o evento.
Excluir um ID de conexão que não está inscrito, ou que não existe mais, não é um erro. A publicação é entregue normalmente para todos os outros.
Quando omitir a exclusão
Use a exclusão para interfaces otimistas. Se o cliente espera pelo evento antes de aplicar uma alteração, não o exclua. Caso contrário, a aba que realizou a ação permanece desatualizada.
Próximos passos
- Publicando eventos abrange o restante do payload de publicação, incluindo envio em lote e broadcasting.
- Canais de presença explicam por que um membro pode manter várias conexões.
- Publicar um evento é a referência completa da solicitação.
Recursos relacionados
Continue com a documentação, guias e exemplos sobre este tópico. Os recursos estão em inglês.
Explore a funcionalidadeRealtimeSiga o percurso de aprendizagemBuild your first integrationGuia de implementaçãoSend your first realtime event
Experimente na prática e obtenha um resumo de implementação