Mengecualikan penerima event
Jika klien menerapkan perubahan secara optimistis sebelum server Anda menerbitkannya, menerima event yang sama dapat menerapkan perubahan itu dua kali. Ini dapat menyebabkan kedipan atau item duplikat.
Kirimkan connection ID klien yang melakukan aksi untuk mengirim event ke setiap koneksi berlangganan lainnya.
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'));Mendapatkan connection ID
Klien membaca connection ID-nya dan mengirimkannya bersama permintaan yang memicu perubahan:
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)ID bernilai null hingga koneksi terbentuk dan berubah setelah koneksi ulang. Baca bird.connection.connectionId di browser atau bird.connectionId di Swift dan Kotlin saat Anda membuat permintaan.
Kirimkan nilainya ke exclude_connection_id setelah memvalidasinya sebagai data permintaan yang tidak tepercaya. Field ini dapat menekan pengiriman ke satu koneksi tetapi tidak dapat memberikan akses ke suatu event.
Perilaku koneksi yang dikecualikan
Hanya koneksi yang disebutkan yang dikecualikan. Tab lain milik orang yang sama menggunakan koneksi terpisah dan tetap menerima event.
Mengecualikan connection ID yang tidak berlangganan, atau sudah tidak ada, bukan merupakan kesalahan. Publish tetap dikirim secara normal ke semua koneksi lainnya.
Kapan tidak menggunakan pengecualian
Gunakan pengecualian untuk antarmuka optimistis. Jika klien menunggu event sebelum menerapkan perubahan, jangan kecualikan klien tersebut. Jika tidak, tab yang melakukan aksi akan tetap usang.
Langkah selanjutnya
- Menerbitkan event membahas sisa payload publish, termasuk batching dan broadcasting.
- Presence channel menjelaskan mengapa satu anggota dapat memiliki beberapa koneksi.
- Publish an event adalah referensi lengkap untuk permintaan tersebut.
Sumber daya terkait
Lanjutkan dengan dokumentasi, panduan, dan contoh untuk topik ini. Sumber daya tersedia dalam bahasa Inggris.
Jelajahi kemampuannyaRealtimeIkuti jalur pembelajaranBuild your first integrationPanduan implementasiSend your first realtime event
Coba praktiknya dan dapatkan ringkasan implementasi