هر تغییر، همان لحظه در مرورگر همه.
فانکشن شما در یک کانال پیام میفرستد و هر مرورگری که به آن کانال متصل است همان لحظه آن را میگیرد. میبینید چه کسی متصل است، مرورگرها میتوانند به هم پیام بدهند و تغییرات جدولهای دیتابیس 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 شمرده نمیشوند. تغییرات جدولها ساعتی حساب میشوند، مثل دیتابیسی که همیشه روشن است. مصرف اول از اعتبار همان ماه و سپس از کیف پول کم میشود.
پرسشهای رایج
نه، مرورگر پیامهایی را میگیرد که در مدت اتصالش فرستاده میشوند. آنچه باید بعداً هم دیده شود را در دیتابیس SQL خودتان نگه دارید و هنگام باز شدن صفحه بخوانید.
مرورگر بدون توکن متصل نمیشود، و توکن را فانکشن شما پس از بررسی ورود کاربر برای یک کانال و یک کاربر میسازد. توکنی که منقضی شده یا با کلید دیگری امضا شده رد میشود.
نه. وقتی مرورگری پیام میفرستد، خود کانال from را برابر کاربر توکن میگذارد و هر from که مرورگر بفرستد نادیده گرفته میشود. پیامی که باید بررسی شود را از مسیری از فانکشن بفرستید.
تا تغییرات فرستاده میشوند، دیتابیس نمیخوابد و همیشه روشن میماند، پس مثل دیتابیس همیشه روشن حساب میشود. داشبورد و خط فرمان پیش از روشن کردن این را میگویند. با خاموش کردن، دیتابیس دوباره در بیکاری میخوابد.
دوباره متصل شوید، و اگر توکن منقضی شده با توکن تازه. در استقرار، اتصال با کد ۱۰۱۲ بسته میشود. برای باز ماندن اتصال، مرورگر دستکم هر ۵۰ ثانیه یک ping بفرستد.
ریلتایم برای رساندن پیام به همهٔ کاربران یک کانال است و کد سمت سرور نمیخواهد. اگر سرور باید هر پیام را بررسی یا تغییر دهد یا وضعیتی نگه دارد، از اکتورها استفاده کنید.
اولین کانال را باز کنید
یک خط برای فرستادن، یک وبسوکت در مرورگر.
فعلاً ثبتنام با کد دعوت است. اگر کد دارید، همین حالا حساب ایجاد کنید.
ثبتنام باکد ایمیلکد پیامکی