שירות WebSocket עבור 1C-Bitrix ו-Bitrix24
בפרקטיקה שלנו, אתר מסחר אלקטרוני טיפוסי של Bitrix מעדכן את מלאי העגלה באיחור של 2-5 שניות. הלקוח מוסיף פריט, אבל המערכת עדיין לא חישבה מחדש את הזמינות. שעה לאחר מכן, מגיע אימייל: 'הפריט אזל מהמלאי'. WebSocket פותר זאת על ידי שמירה על חיבור קבוע והעברת נתונים באופן מיידי. התראות Push למסחר אלקטרוני — אחד התרחישים המרכזיים שאנו מיישמים. WebSocket הוא תקן לתקשורת דו-כיוונית (ויקיפדיה). אנו מציעים לבחור את הארכיטקטורה הנכונה: Centrifugo, Ratchet, או Node.js. בואו נפרק מה ומתי לבחור, ואיך לשלב ללא כאבי ראש.
הבעיה עם Polling
במקום שהדפדפן ישאל כל N שניות "יש נתונים חדשים?", WebSocket שומר על חיבור קבוע יחיד. עם 1000 משתמשים בו-זמנית ומרווח של 5 שניות, Polling יוצר 200 בקשות בשנייה — רובן ריקות. WebSocket שולח נתונים רק כשהם מופיעים, ומפחית את עומס השרת פי 10-15 וחוסך עד 40% ממשאבי השרת (חיסכון מוערך של 500$ לחודש באירוח ענן טיפוסי). Long Polling הוא פשרה אבל מתקשה בקנה מידה גדול יותר וצורך יותר זיכרון. בפועל, WebSocket מתמודד עם עד 10,000 חיבורים בו-זמנית על שרת יחיד ללא אובדן ביצועים, עם זמני תגובה מתחת ל-50ms.
בחירת שרת WebSocket עבור Bitrix
בחירת הטכנולוגיה קובעת את מהירות הפיתוח ואת עלות התחזוקה. להלן השוואה בין שלוש גישות ללא הבטחות שיווקיות.
השוואת טכנולוגיות
| קריטריון | Centrifugo | Ratchet | Node.js + Socket.io |
|---|---|---|---|
| מוכנות לייצור | גבוהה (מוכן לשימוש) | בינונית (דורש עידון) | גבוהה (מערכת אקולוגית מוכנה) |
| גמישות התאמה אישית | נמוכה (דרך API) | גבוהה (שליטה מלאה) | בינונית (מערכת אקולוגית) |
| ביצועים (חיבורים) | ~50,000 (פי 10 יותר מ-Ratchet) | ~5,000 | ~100,000 (פי 20 יותר מ-Ratchet) |
| מורכבות אינטגרציה | נמוכה (2-3 ימים) | בינונית (1-2 שבועות) | בינונית (1-2 שבועות) |
| תמיכה ב-PHP | דרך HTTP API | ישירה (PHP) | דרך Redis |
| עלות טיפוסית | החל מ-2,000$ | החל מ-3,500$ | החל מ-4,000$ |
Centrifugo מתאים להתחלה מהירה: שרת מוכן עם הרשאת ערוצים, היסטוריית הודעות וסקיילינג. מקבלים פתרון מוכן לייצור תוך כמה ימים, אבל פחות גמישות — צריך להתאים את עצמכם ל-API שלו. Ratchet, לעומת זאת, נותן שליטה מלאה: אתם כותבים את לוגיקת החיבור ב-PHP, משתלבים ישירות עם Bitrix. החיסרון — תצטרכו ליישם הרשאות וטיפול בשגיאות ידנית. Node.js + Socket.io מיועד לפרויקטים בעומס גבוה עם אלפי חיבורים. זהו סט טכנולוגיות נפרד, אינטגרציה דרך Redis pub/sub, אבל הביצועים גבוהים פי 2-3 בהשוואה ל-Ratchet.
לחנות מסחר אלקטרוני טיפוסית עם 200 הזמנות ביום, Centrifugo מספיק. אם אתם צריכים צ'אט מורכב עם היסטוריה ומודרציה — בחרו ב-Node.js. עם תקציב מוגבל והתאמה אישית מלאה — Ratchet. הניסיון מראה שהבחירה הנכונה מפחיתה את עלות הבעלות הכוללת ב-40%.
ארכיטקטורה עם Centrifugo
Centrifugo הוא שירות נפרד, Bitrix מתקשר איתו דרך HTTP API:
Браузер ←→ WebSocket ←→ Centrifugo ←→ Redis ↑ Битрикс публикует события כאשר מתרחש אירוע ב-Bitrix (הזמנה חדשה, שינוי סטטוס) — קוד PHP מפרסם לערוץ Centrifugo:
$centrifugo = new CentrifugoClient('http://centrifugo:8000', $apiKey); $centrifugo->publish('orders:' . $managerId, [ 'event' => 'new_order', 'order_id' => $orderId, 'customer' => $customerName, 'amount' => $amount, ]); הדפדפן, המנוי לערוץ Браузер ←→ WebSocket ←→ Centrifugo ←→ Redis ↑ Битрикс публикует события , מקבל את האירוע באופן מיידי. הרשאת ערוץ דרך JWT — Centrifugo בודק הרשאות דרך נקודת קצה של Bitrix.
ארכיטקטורה עם Ratchet
לאינטגרציה הדוקה יותר — שרת WebSocket מותאם אישית על Ratchet. רץ כדמון:
php /local/cli/websocket_server.php // websocket_server.php use Ratchet\Server\IoServer; use Ratchet\Http\HttpServer; use Ratchet\WebSocket\WsServer; $server = IoServer::factory( new HttpServer( new WsServer( new BitrixWebSocketHandler() ) ), 8080 ); $server->run(); $centrifugo = new CentrifugoClient('http://centrifugo:8000', $apiKey); $centrifugo->publish('orders:' . $managerId, [ 'event' => 'new_order', 'order_id' => $orderId, 'customer' => $customerName, 'amount' => $amount, ]); מממש orders:{managerId}:
-
php /local/cli/websocket_server.php— חיבור חדש, הרשאה -
// websocket_server.php use Ratchet\Server\IoServer; use Ratchet\Http\HttpServer; use Ratchet\WebSocket\WsServer; $server = IoServer::factory( new HttpServer( new WsServer( new BitrixWebSocketHandler() ) ), 8080 ); $server->run();— הודעה מלקוח -
BitrixWebSocketHandler— סגירה -
\Ratchet\MessageComponentInterface— שגיאה
אחסון חיבורים: onOpen עם מיפוי onMessage. תקשורת עם Bitrix דרך Redis pub/sub — Bitrix מפרסם, Ratchet קורא ומפיץ.
איך לשלב WebSocket עם Bitrix?
האינטגרציה מורכבת מכמה שלבים. נשתמש ב-Centrifugo כדוגמה — הבחירה הנפוצה ביותר.
- התקינו והגדירו את Centrifugo. הריצו קונטיינר Docker, ציינו מפתח API וסוד JWT.
- הגדירו הרשאות. צרו נקודת קצה ב-Bitrix שמחזירה טוקן JWT למשתמש הנוכחי. Centrifugo בודק את הטוקן בכל חיבור.
- פרסמו אירועים. במטפלי אירועים של Bitrix (למשל,
onClose), קראו ל-HTTP API של Centrifugo כדי לפרסם לערוץ המתאים. - לקוח Frontend. התחברו דרך WebSocket, העבירו את הטוקן, הירשמו לערוצים וטפלו בהודעות.
- פריסה עם Supervisor ו-Nginx. ודאו הפעלה מחדש אוטומטית ופרוקסי.
Frontend: התחברות ל-WebSocket
const ws = new WebSocket('wss://example.com:8080'); ws.onopen = () => { ws.send(JSON.stringify({ type: 'auth', token: userJwt })); }; ws.onmessage = (event) => { const data = JSON.parse(event.data); if (data.event === 'new_order') { showNotification(`Новый заказ #${data.order_id} на ${data.amount} $`); } }; ws.onclose = () => { setTimeout(() => connectWebSocket(), 3000); }; חיבור מחדש אוטומטי עם backoff אקספוננציאלי הוא חובה. רשתות ניידות אינן יציבות.
מה כלול בעבודה
- ניתוח תרחישים ובחירת טכנולוגיה
- הגדרת שרת WebSocket (Centrifugo/Ratchet/Node.js)
- אינטגרציה עם Bitrix דרך Redis pub/sub
- פיתוח לקוח Frontend (JS, הרשאות, חיבור מחדש)
- פריסה עם Supervisor ו-Nginx
- ניטור מדדי חיבורים
- תיעוד ארכיטקטורה ותמיכה
- תוצרים: תיעוד ארכיטקטוני מפורט, פרטי גישה לשרת, מפגש הדרכה של שעתיים לצוות שלכם, וחודש תמיכה לאחר ההשקה
שלבי פיתוח
| שלב | תוכן | משך |
|---|---|---|
| בחירת טכנולוגיה | Centrifugo מול Ratchet מול Node.js, הערכת תשתית | 2–3 ימים |
| שרת WebSocket | תשתית בסיסית, הרשאות | שבוע |
| אינטגרציית Bitrix | Redis pub/sub, פרסום אירועים מ-PHP | 3–5 ימים |
| לקוח Frontend | לקוח JS, חיבור מחדש, טיפול באירועים | 3–5 ימים |
| תרחישים ספציפיים | התראות, צ'אט, עדכוני נתונים | 1–2 שבועות |
| פריסה וניטור | Supervisor, Nginx, מדדי חיבורים | 3–5 ימים |
מתי WebSocket מוצדק?
WebSocket מוצדק במקומות שבהם עיכוב של כמה שניות קריטי ל-UX. להתראות שניתן להציג במעבר העמוד הבא — זה מוגזם. אנו נעריך את הפרויקט שלכם בחינם — פשוט צרו קשר.
כדי לזרז את הבחירה: אם יש לכם עד 1000 חיבורים בו-זמנית ותרחישים טיפוסיים (התראות, עדכוני עגלה) — בחרו ב-Centrifugo. אם אתם צריכים פרוטוקול מותאם אישית או אינטגרציה עם לוגיקת PHP — Ratchet. לצ'אטים בקנה מידה גדול ושיתופי פעולה — Node.js. קבלו ייעוץ מהמהנדס שלנו — נעזור לתכנן את הארכיטקטורה.
עם ניסיון של למעלה מ-5 שנים ומפתחי Bitrix מוסמכים, אנו מבטיחים זמינות של 99.9% לשירות ה-WebSocket שלכם.







