Pilih preferensi cookie Anda

Kami menggunakan cookie penting serta alat serupa yang diperlukan untuk menyediakan situs dan layanan. Kami menggunakan cookie performa untuk mengumpulkan statistik anonim sehingga kami dapat memahami cara pelanggan menggunakan situs dan melakukan perbaikan. Cookie penting tidak dapat dinonaktifkan, tetapi Anda dapat mengklik “Kustom” atau “Tolak” untuk menolak cookie performa.

Jika Anda setuju, AWS dan pihak ketiga yang disetujui juga akan menggunakan cookie untuk menyediakan fitur situs yang berguna, mengingat preferensi Anda, dan menampilkan konten yang relevan, termasuk iklan yang relevan. Untuk menerima atau menolak semua cookie yang tidak penting, klik “Terima” atau “Tolak”. Untuk membuat pilihan yang lebih detail, klik “Kustomisasi”.

Berhenti berlangganan WebSocket koneksi menggunakan filter di AWS AppSync

Mode fokus
Berhenti berlangganan WebSocket koneksi menggunakan filter di AWS AppSync - AWS AppSync GraphQL

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Di AWS AppSync, Anda dapat berhenti berlangganan secara paksa dan menutup (membatalkan) WebSocket koneksi dari klien yang terhubung berdasarkan logika penyaringan tertentu. Ini berguna dalam skenario terkait otorisasi seperti ketika Anda menghapus pengguna dari grup.

Pembatalan langganan terjadi sebagai respons terhadap muatan yang ditentukan dalam mutasi. Sebaiknya Anda memperlakukan mutasi yang digunakan untuk membatalkan koneksi langganan sebagai operasi administratif di API dan izin cakupan sesuai dengan membatasi penggunaannya pada pengguna admin, grup, atau layanan backend. Misalnya, menggunakan arahan otorisasi skema seperti atau. @aws_auth(cognito_groups: ["Administrators"]) @aws_iam Untuk informasi selengkapnya, lihat Menggunakan mode otorisasi tambahan.

Filter pembatalan menggunakan sintaks dan logika yang sama dengan filter langganan yang disempurnakan. Tentukan filter ini menggunakan utilitas berikut:

  • extensions.invalidateSubscriptions()— Didefinisikan dalam penangan respons GraphQL resolver untuk mutasi.

  • extensions.setSubscriptionInvalidationFilter()— Didefinisikan dalam penangan respons GraphQL resolver dari langganan yang ditautkan ke mutasi.

Untuk informasi selengkapnya tentang ekstensi pemfilteran pembatalan, lihat JavaScript ikhtisar penyelesai.

Menggunakan pembatalan langganan

Untuk melihat cara kerja pembatalan langganan AWS AppSync, gunakan skema GraphQL berikut:

type User { userId: ID! groupId: ID! } type Group { groupId: ID! name: String! members: [ID!]! } type GroupMessage { userId: ID! groupId: ID! message: String! } type Mutation { createGroupMessage(userId: ID!, groupId : ID!, message: String!): GroupMessage removeUserFromGroup(userId: ID!, groupId : ID!) : User @aws_iam } type Subscription { onGroupMessageCreated(userId: ID!, groupId : ID!): GroupMessage @aws_subscribe(mutations: ["createGroupMessage"]) } type Query { none: String }

Tentukan filter pembatalan dalam kode penyelesai removeUserFromGroup mutasi:

import { extensions } from '@aws-appsync/utils'; export function request(ctx) { return { payload: null }; } export function response(ctx) { const { userId, groupId } = ctx.args; extensions.invalidateSubscriptions({ subscriptionField: 'onGroupMessageCreated', payload: { userId, groupId }, }); return { userId, groupId }; }

Saat mutasi dipanggil, data yang ditentukan dalam payload objek digunakan untuk berhenti berlangganan langganan yang ditentukan. subscriptionField Filter pembatalan juga didefinisikan dalam template pemetaan respons onGroupMessageCreated langganan.

Jika extensions.invalidateSubscriptions() payload berisi ID yang cocok dengan klien berlangganan seperti yang didefinisikan dalam filter, langganan terkait akan berhenti berlangganan. IDs Selain itu, WebSocket koneksi ditutup. Tentukan kode resolver langganan untuk langganan: onGroupMessageCreated

import { util, extensions } from '@aws-appsync/utils'; export function request(ctx) { // simplfy return null for the payload return { payload: null }; } export function response(ctx) { const filter = { groupId: { eq: ctx.args.groupId } }; extensions.setSubscriptionFilter(util.transform.toSubscriptionFilter(filter)); const invalidation = { groupId: { eq: ctx.args.groupId }, userId: { eq: ctx.args.userId } }; extensions.setSubscriptionInvalidationFilter(util.transform.toSubscriptionFilter(invalidation)); return null; }

Perhatikan bahwa handler respons langganan dapat memiliki filter langganan dan filter pembatalan yang ditentukan secara bersamaan.

Misalnya, asumsikan bahwa klien A berlangganan pengguna baru dengan ID user-1 ke grup dengan ID group-1 menggunakan permintaan berlangganan berikut:

onGroupMessageCreated(userId : "user-1", groupId: :"group-1"){...}

AWS AppSync menjalankan resolver langganan, yang menghasilkan filter langganan dan pembatalan seperti yang didefinisikan dalam template pemetaan respons sebelumnyaonGroupMessageCreated. Untuk klien A, filter langganan memungkinkan data dikirim hanya kegroup-1, dan filter pembatalan ditentukan untuk keduanya user-1 dan. group-1

Sekarang asumsikan bahwa klien B berlangganan pengguna dengan ID user-2 ke grup dengan ID group-2 menggunakan permintaan berlangganan berikut:

onGroupMessageCreated(userId : "user-2", groupId: :"group-2"){...}

AWS AppSync menjalankan resolver langganan, yang menghasilkan filter langganan dan pembatalan. Untuk klien B, filter langganan memungkinkan data dikirim hanya kegroup-2, dan filter pembatalan ditentukan untuk keduanya user-2 dan. group-2

Selanjutnya, asumsikan bahwa pesan grup baru dengan ID message-1 dibuat menggunakan permintaan mutasi seperti pada contoh berikut:

createGroupMessage(id: "message-1", groupId : "group-1", message: "test message"){...}

Klien berlangganan yang cocok dengan filter yang ditentukan secara otomatis menerima muatan data berikut melalui: WebSockets

{ "data": { "onGroupMessageCreated": { "id": "message-1", "groupId": "group-1", "message": "test message", } } }

Klien A menerima pesan karena kriteria pemfilteran cocok dengan filter langganan yang ditentukan. Namun, klien B tidak menerima pesan, karena pengguna bukan bagian darigroup-1. Selain itu, permintaan tidak cocok dengan filter langganan yang ditentukan dalam resolver langganan.

Akhirnya, asumsikan user-1 bahwa dihapus dari group-1 menggunakan permintaan mutasi berikut:

removeUserFromGroup(userId: "user-1", groupId : "group-1"){...}

Mutasi memulai pembatalan langganan seperti yang didefinisikan dalam kode penangan respons extensions.invalidateSubscriptions() resolvernya. AWS AppSync kemudian berhenti berlangganan klien A dan menutup koneksinya. WebSocket Klien B tidak terpengaruh, karena payload pembatalan yang ditentukan dalam mutasi tidak cocok dengan pengguna atau grupnya.

Ketika AWS AppSync membatalkan koneksi, klien menerima pesan yang mengonfirmasi bahwa mereka berhenti berlangganan:

{ "message": "Subscription complete." }

Menggunakan variabel konteks dalam filter pembatalan langganan

Seperti halnya filter langganan yang disempurnakan, Anda dapat menggunakan contextvariabel dalam ekstensi filter pembatalan langganan untuk mengakses data tertentu.

Misalnya, Anda dapat mengonfigurasi alamat email sebagai payload pembatalan dalam mutasi, lalu mencocokkannya dengan atribut email atau klaim dari pengguna berlangganan yang diotorisasi dengan kumpulan pengguna Amazon Cognito atau OpenID Connect. Filter pembatalan yang ditentukan dalam invalidator extensions.setSubscriptionInvalidationFilter() langganan memeriksa apakah alamat email yang ditetapkan oleh extensions.invalidateSubscriptions() muatan mutasi cocok dengan alamat email yang diambil dari token JWT pengguna, memulai pembatalan. context.identity.claims.email

PrivasiSyarat situsPreferensi cookie
© 2025, Amazon Web Services, Inc. atau afiliasinya. Semua hak dilindungi undang-undang.