Bagikan melalui


Penghandel Azure Web PubSub CloudEvents untuk Ekspres

Layanan Azure Web PubSub adalah layanan terkelola Azure yang bertujuan untuk memudahkan pengembang membuat aplikasi web dengan fitur real-time dan pola terbitkan-berlangganan. Skenario apa pun yang memerlukan olahpesan terbitkan-berlangganan real-time antara server dan klien atau di antara klien dapat menggunakan layanan Azure Web PubSub. Fitur real-time tradisional yang sering memerlukan polling dari server atau pengiriman permintaan HTTP juga dapat menggunakan layanan Azure Web PubSub.

Ketika koneksi WebSocket terhubung, layanan Web PubSub mengubah siklus hidup koneksi dan pesan menjadi peristiwa dalam format CloudEvents. Pustaka ini menyediakan middleware ekspres untuk menangani peristiwa yang mewakili siklus hidup dan pesan koneksi WebSocket, seperti yang ditunjukkan pada diagram di bawah ini:

cloudevents

Rincian tentang ketentuan yang digunakan dijelaskan di bagian Konsep kunci.

Kode sumber | Paket (NPM) | dokumentasi referensi API | Dokumentasi produk | Sampel

Memulai

Lingkungan yang didukung saat ini

Prasyarat

1. pasang paket @azure/web-pubsub-express

npm install @azure/web-pubsub-express

2. Membuat WebPubSubEventHandler

const express = require("express");

const { WebPubSubEventHandler } = require("@azure/web-pubsub-express");
const handler = new WebPubSubEventHandler("chat");

const app = express();

app.use(handler.getMiddleware());

app.listen(3000, () =>
  console.log(`Azure WebPubSub Upstream ready at http://localhost:3000${handler.path}`)
);

Konsep utama

Koneksi

Koneksi, juga dikenal sebagai klien atau koneksi klien, mewakili koneksi WebSocket individu yang terhubung ke layanan Web PubSub. Jika berhasil terhubung, ID koneksi unik ditetapkan ke koneksi ini oleh layanan Web PubSub.

Hub

Hub adalah konsep logis untuk serangkaian koneksi klien. Biasanya, Anda menggunakan satu hub untuk satu tujuan, misalnya, hub obrolan, atau hub pemberitahuan. Ketika koneksi klien dibuat, koneksi tersebut terhubung ke hub, dan selama masa pakainya, menjadi milik hub tersebut. Aplikasi yang berbeda dapat berbagi satu layanan Azure Web PubSub dengan menggunakan nama hub yang berbeda.

Grup

Grup adalah subset koneksi ke hub. Anda dapat menambahkan koneksi klien ke grup atau menghapus koneksi klien dari grup kapan saja Anda inginkan. Misalnya, saat klien bergabung dengan ruang obrolan atau saat klien keluar dari ruang obrolan, ruang obrolan semacam itu bisa menjadi grup. Klien dapat bergabung dengan beberapa grup, dan grup dapat berisi beberapa klien.

Pengguna

Koneksi ke Web PubSub dapat menjadi milik satu pengguna. Pengguna mungkin memiliki beberapa koneksi, misalnya saat satu pengguna terhubung di beberapa perangkat atau beberapa tab browser.

Peristiwa Klien

Acara dibuat selama siklus hidup koneksi klien. Misalnya, koneksi klien WebSocket sederhana membuat acara connect ketika mencoba untuk terhubung ke layanan, acara connected ketika berhasil terhubung ke layanan, acara message ketika mengirim pesan ke layanan dan acara disconnected ketika terputus dari layanan.

Penanganan aktivitas

Penanganan aktivitas berisi logika untuk menhandel acara klien. Penanganan aktivitas perlu didaftarkan dan dikonfigurasi dalam layanan melalui portal atau Azure CLI sebelumnya. Tempat untuk menjadi host logika penanganan aktivitas dianggap sebagai sisi server.

Contoh

Menangani permintaan connect dan menetapkan <userId>

const express = require("express");

const { WebPubSubEventHandler } = require("@azure/web-pubsub-express");
const handler = new WebPubSubEventHandler("chat", {
  handleConnect: (req, res) => {
    // auth the connection and set the userId of the connection
    res.success({
      userId: "<userId>"
    });
  },
  allowedEndpoints: ["https://<yourAllowedService>.webpubsub.azure.com"]
});

const app = express();

app.use(handler.getMiddleware());

app.listen(3000, () =>
  console.log(`Azure WebPubSub Upstream ready at http://localhost:3000${handler.path}`)
);

Hanya mengizinkan titik akhir yang ditentukan

const express = require("express");

const { WebPubSubEventHandler } = require("@azure/web-pubsub-express");
const handler = new WebPubSubEventHandler("chat", {
  allowedEndpoints: [
    "https://<yourAllowedService1>.webpubsub.azure.com",
    "https://<yourAllowedService2>.webpubsub.azure.com"
  ]
});

const app = express();

app.use(handler.getMiddleware());

app.listen(3000, () =>
  console.log(`Azure WebPubSub Upstream ready at http://localhost:3000${handler.path}`)
);

Mengatur jalur penangan peristiwa kustom

const express = require("express");

const { WebPubSubEventHandler } = require("@azure/web-pubsub-express");
const handler = new WebPubSubEventHandler("chat", {
  path: "customPath1"
});

const app = express();

app.use(handler.getMiddleware());

app.listen(3000, () =>
  // Azure WebPubSub Upstream ready at http://localhost:3000/customPath1
  console.log(`Azure WebPubSub Upstream ready at http://localhost:3000${handler.path}`)
);

Mengatur dan membaca status koneksi

const express = require("express");

const { WebPubSubEventHandler } = require("@azure/web-pubsub-express");

const handler = new WebPubSubEventHandler("chat", {
  handleConnect(req, res) {
    // You can set the state for the connection, it lasts throughout the lifetime of the connection
    res.setState("calledTime", 1);
    res.success();
  },
  handleUserEvent(req, res) {
    var calledTime = req.context.states.calledTime++;
    console.log(calledTime);
    // You can also set the state here
    res.setState("calledTime", calledTime);
    res.success();
  }
});

const app = express();

app.use(handler.getMiddleware());

app.listen(3000, () =>
  console.log(`Azure WebPubSub Upstream ready at http://localhost:3000${handler.path}`)
);

Pemecahan Masalah

Aktifkan log

Anda dapat mengatur variabel lingkungan berikut untuk mendapatkan log debug saat menggunakan pustaka ini.

  • Mendapatkan log debug dari pustaka klien SignalR
export AZURE_LOG_LEVEL=verbose

Untuk instruksi lebih rinci tentang cara mengaktifkan log, Anda dapat melihat dokumen paket @azure/pencatat.

Jejak Hidup

Gunakan Live Trace dari portal layanan Web PubSub untuk melihat lalu lintas langsung.

Langkah berikutnya

Silakan lihat direktori sampel untuk contoh terperinci tentang cara menggunakan pustaka ini.

Berkontribusi

Jika Anda ingin berkontribusi pada pustaka ini, baca panduan berkontribusi untuk mempelajari selengkapnya tentang cara membuat dan menguji kode.