رفتن به محتوا
cloudhost
ریل‌تایم

هر تغییر، همان لحظه در مرورگر همه.

فانکشن شما در یک کانال پیام می‌فرستد و هر مرورگری که به آن کانال متصل است همان لحظه آن را می‌گیرد. می‌بینید چه کسی متصل است، مرورگرها می‌توانند به هم پیام بدهند و تغییرات جدول‌های دیتابیس SQL هم به کانال می‌روند. سرور وب‌سوکتی برای نوشتن یا نگه‌داشتن ندارید.

آنچه می‌گیرید

  • کانال‌ها

    کانال نامی است که فانکشن و مرورگر روی آن توافق می‌کنند، مثل room-1. لازم نیست ایجاد شود: اولین اتصال یا اولین پیام آن را فعال می‌کند.

  • ارسال از هر جا

    با env.REALTIME.publish از فانکشن، یا از API، خط فرمان و MCP. هر پیام یک بار و به ترتیب ارسال به هر اتصال باز می‌رسد.

  • کاربران متصل

    هر مرورگر هنگام ورود فهرست کاربران متصل کانال را می‌گیرد و ورود و خروج دیگران را همان لحظه می‌بیند. فانکشن هم با env.REALTIME.presence آن را می‌پرسد.

  • ارسال از مرورگر

    با توکنی که publish: true دارد، مرورگر خودش پیام می‌فرستد و بقیهٔ کاربران کانال آن را با نام فرستنده در from می‌گیرند. برای گفتگو، نشانگر هم‌زمان یا «در حال نوشتن».

  • توکن‌های کوتاه‌مدت

    مرورگر فقط با توکنی متصل می‌شود که فانکشن شما برای یک کانال و یک کاربر می‌سازد، به‌طور پیش‌فرض برای ۱۰ دقیقه و حداکثر یک ساعت. کلید امضا در سکرت‌های پروژه است؛ با چرخش آن، توکن‌های قبلی از کار می‌افتند.

  • تغییرات جدول‌ها

    هر insert، update و delete در جدول‌هایی که انتخاب می‌کنید، پس از ثبت به یک کانال می‌رود: هر تغییر یک بار و به ترتیب ثبت. برای هر دیتابیس جدا روشن می‌شود و به‌طور پیش‌فرض خاموش است.

  • یک وب‌سوکت، بدون نصب

    مرورگر با همان WebSocket خودش به یک آدرس متصل می‌شود. پیام‌ها JSON ساده‌اند و نوعشان مشخص است: presence، join، leave، message و change.

  • هر محیط، کانال‌های خودش

    پروداکشن، پیش‌نمایش‌ها و محیط توسعه کانال‌های جدا دارند، پس پیام یک پیش‌نمایش هرگز به کاربران پروداکشن نمی‌رسد.

  • استقرار بدون دردسر

    در استقرار یا جابه‌جایی، اتصال با کد ۱۰۱۲ بسته می‌شود تا مرورگر دوباره متصل شود. اضافه شدن سرور هیچ کانالی را جابه‌جا نمی‌کند.

  • دید روی کانال‌ها

    کانال‌های فعال، اتصال‌ها، پیام‌های ساعت گذشته و کاربران متصل هر کانال در داشبورد، و پیام تستی از همان‌جا. مصرف روزانه با بیشترین اتصال هم‌زمان.

یک کانال گفتگو

فانکشن برای هر کاربر توکن می‌سازد؛ مرورگر با آن متصل می‌شود، کاربران متصل را می‌بیند و خودش هم پیام می‌فرستد.

export default {
  async fetch(request, env) {
    const { pathname } = new URL(request.url)

    if (pathname === "/token") {
      const user = await currentUser(request) // your own sign-in
      return Response.json(await env.REALTIME.token({ channel: "room-1", user, publish: true }))
    }

    if (pathname === "/announce" && request.method === "POST") {
      const { delivered } = await env.REALTIME.publish("room-1", await request.json())
      return Response.json({ delivered })
    }

    return new Response("not found", { status: 404 })
  },
}

تغییرات جدول، بدون کد

جدول‌ها را انتخاب کنید؛ هر تغییر ثبت‌شده با نوع change به کانال همان جدول می‌رسد، کنار پیام‌هایی که فانکشن می‌فرستد. برای update و delete، جدول باید primary key داشته باشد.

cloudhost realtime table-changes on shop \
  --table orders --table public.items=stock \
  --events insert,update --acknowledge-always-on

به ازای پیام و دقیقهٔ اتصال

هر پیامی که به یک مرورگر متصل می‌رسد یک پیام است و هر دقیقه‌ای که اتصالی باز است یک دقیقهٔ اتصال. رویدادهای کاربران متصل و ping شمرده نمی‌شوند. تغییرات جدول‌ها ساعتی حساب می‌شوند، مثل دیتابیسی که همیشه روشن است. مصرف اول از اعتبار همان ماه و سپس از کیف پول کم می‌شود.

پرسش‌های رایج

اولین کانال را باز کنید

یک خط برای فرستادن، یک وب‌سوکت در مرورگر.

فعلاً ثبت‌نام با کد دعوت است. اگر کد دارید، همین حالا حساب ایجاد کنید.

ثبت‌نام باکد ایمیلکد پیامکی