2 KiB
Executable file
چت CRM و WebSocket (/ws/crm-chat)
وضعیت اتصال وبسوکت و رویدادهای زندهٔ چت وب (تایپ، ورود عامل، پیامها) در حافظهٔ هر فرایند uvicorn گیر میکنند.
Redis خاموش است
بدون Redis هیچ پخشی بین چند worker وجود ندارد. باید یکی از دو کار را انجام دهید:
-
یک worker برای API که پشت آن WebSocket باز میشود
مثال:--workers 1یا تنها یک نمونهٔ برنامهٔ ASGI؛ یا کل ترافیکwss://…/ws/crm-chatرا به یک نمونه هدایت کنید. -
Sticky وبسوکت در لودبالانسر
هر دو اتصال (ویجیت سایت بازدیدکننده و اپراتور CRM که به همانapiBase/دامنه وبسوکت وصل میشوند) باید تا پایان عمر سکشن وبسوکت به یک upstream بروند (ip_hash، cookie sticky، یا مکانیزم معادل).
اگر همزمان چند worker داشته باشید و بازدیدکننده روی worker A و عامل روی worker B باشد، تایپ و agent.joined به طرف مقابل نمیرسد — این رفتار مورد انتظار است تا Redis روشن نشود.
Redis روشن است
میتوانید چند worker داشته باشید؛ کانال Pub/Sub داخلی رویدادها را به همهٔ فرایندها میرساند (بعد از هر رویداد، تحویل محلی هم روی کارگر فرستنده انجام میشود تا حتی بدون تأخیر شبکهٔ Redis، کلاینتهای همان کارگر آپدیت شوند).
مسیر وبسوکت
نقطهٔ اتصال معمولا زیر پیشوند API است، مثلاً:
{base}/ws/crm-chat
همان میزبانی را که کلاینتهای Flutter وب و ویجیت وردپرس استفاده میکنند، در تنظیمات sticky در نظر بگیرید.