WebSocket עבור 1C-Bitrix: הגדרה והפחתת השהיה

WebSocket עבור 1C-Bitrix: הגדרה והפחתת השהיה דמיינו: פורטל ארגוני עם 500 עובדים, צ'אט כערוץ התקשורת הראשי. כל 20 שניות, הדפדפן של כל עובד שולח בקשה "יש הודעות חדשות?" — זה Long Polling. השרת מוצף, והודעות מגיעות באיחור
השירותים שאנו מציעים
מציג 1 מתוך 1כל 1626 השירותים
WebSocket עבור 1C-Bitrix: הגדרה והפחתת השהיה
פשוט
~1 יום

הכישורים שלנו:

שאלות נפוצות

העבודות האחרונות

  • image_website-b2b-advance_0.webp
    פיתוח אתר חברה B2B ADVANCE
    1458
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    פיתוח אתר לחברת FIXPER
    1019
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    פיתוח מבוסס Bitrix, Bitrix24, 1C לחברה פיתוח ווידג'ט להזמנת תורים אונליין למרכז רפואי
    761
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    פיתוח על בסיס 1C Enterprise עבור MIRSANBEL
    882
  • image_crm_dolbimby_434_0.webp
    פיתוח אתר על CRM Bitrix24 עבור DOLBIMBY
    806
  • image_crm_technotorgcomplex_453_0.webp
    פיתוח על בסיס Bitrix24 עבור חברת TECHNOTORGKOMPLEKS
    1163

WebSocket עבור 1C-Bitrix: הגדרה והפחתת השהיה

תארו לעצמכם: פורטל ארגוני עם 500 עובדים, צ'אט כערוץ התקשורת הראשי. כל 20 שניות, הדפדפן של כל עובד שולח בקשה "יש הודעות חדשות?" — זהו Long Polling. השרת מוצף, והודעות מגיעות באיחור. נתקלנו בזה עשרות פעמים. הגדרת WebSocket ב-Bitrix פותרת את הבעיה באופן קיצוני: השרת דוחף נתונים ברגע שהם מופיעים, עומס הערוץ יורד ב-70%, והשהיה — במילישניות. עם הניסיון שלנו (10+ שנים עם Bitrix, 50+ פרויקטי WebSocket) אתם מקבלים אחריות לפעולה יציבה.

כיצד WebSocket מאיץ את Bitrix24

WebSocket הוא חיבור דו-כיווני קבוע בין הדפדפן לשרת. ב-Bitrix, המודול pull (Push and Pull) מטפל בכך. כאשר קיים NodeJS push-server, הוא עובר אוטומטית מ-Long Polling ל-WebSocket. הצד הלקוח הוא ספריית ה-JS BX.PullClient, שמנסה תחילה WebSocket, נופל ל-SSE, ולאחר מכן ל-Long Polling.

WebSocket עולה על Long Polling עד פי 20 בהשהיה ומפחית את עומס השרת עד 70%.

התעבורה נקבעת ב-bitrix/js/pull/pull.js דרך המשתנה BX.Pull.config. כדי לאלץ תעבורה לניפוי באגים:

BX.Pull.connect({ serverEnabled: true, serverUrl: 'https://example.ru/bitrix/subws/', guestMode: false, userId: USER_ID, userHash: USER_HASH, transport: 'websocket' // принудительно WebSocket }); 

השוואה בין Long Polling ל-WebSocket:

מאפיין Long Polling WebSocket
השהיית אספקה 20 שניות (מקסימום) מילישניות
תעבורה לכל לקוח גבוהה (בקשות תכופות) נמוכה (חיבור יחיד)
עומס שרת גבוה (בקשות HTTP רבות) נמוך (עד 70% פחות)
מדרגיות קשה (מגבלת חיבורים) אשכולות (10,000+)

מדוע Long Polling רגיל אינו מתאים לפרויקטים בעלי עומס גבוה

עם 2000 משתמשים מחוברים, Long Polling יוצר 2000 בקשות כל 20 שניות — 100 בקשות בשנייה. זה יוצר עומס עצום על Nginx ו-PHP-FPM. WebSocket מחזיק חיבור קבוע אחד לכל משתמש, ומפחית את בקשות ה-HTTP לאפס. חיסכון במשאבים מאפשר לשרת יותר לקוחות על אותה חומרה. בפרויקט אחד, הורדנו את עומס ה-CPU של השרת מ-85% ל-25% והפחתנו את השהיית אספקת ההודעות מ-15 שניות לפחות מ-100ms.

הגדרת WebSocket שלב אחר שלב ב-Bitrix

בדיקת סביבה

ודאו שהשרת עומד בדרישות: PHP 7.4+, Node.js 12+, המודול BX.Pull.connect({ serverEnabled: true, serverUrl: 'https://example.ru/bitrix/subws/', guestMode: false, userId: USER_ID, userHash: USER_HASH, transport: 'websocket' // принудительно WebSocket }); מופעל (עבור NodeJS push-server). הניסיון שלנו מראה ש-80% מהבעיות נובעות מהיעדר הרשאות ביצוע לתהליך NodeJS.

הגדרת Nginx

WebSocket דורש טיפול מיוחד ב-Nginx. המפתח הם כותרות proc_open ו-Upgrade:

map $http_upgrade $connection_upgrade { default upgrade; '' close; } server { listen 443 ssl http2; server_name example.ru; # ... SSL настройки ... # WebSocket endpoint для push-server location /bitrix/subws/ { proxy_pass http://127.0.0.1:9011; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # Критически важно: без этого Nginx разрывает соединение через 60 сек proxy_read_timeout 3600s; proxy_send_timeout 3600s; # Не буферизировать — данные должны идти в реальном времени proxy_buffering off; } } 

Connection — מטפל נכון גם בחיבורי WebSocket (Upgrade: websocket) וגם בבקשות HTTP רגילות דרך מיקום אחד.

אשכולות NodeJS Push-Server

תהליך NodeJS יחיד משתמש בליבת CPU אחת. תחת עומס גבוה (1000+ חיבורים), יש צורך במצב אשכול — מספר תהליכי עובדים מאחורי מאזן עומסים:

ב-map $http_upgrade $connection_upgrade { default upgrade; '' close; } server { listen 443 ssl http2; server_name example.ru; # ... SSL настройки ... # WebSocket endpoint для push-server location /bitrix/subws/ { proxy_pass http://127.0.0.1:9011; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # Критически важно: без этого Nginx разрывает соединение через 60 сек proxy_read_timeout 3600s; proxy_send_timeout 3600s; # Не буферизировать — данные должны идти в реальном времени proxy_buffering off; } } של push-server:

{ "cluster": { "workers": 4, "sticky": true } } 

map $http_upgrade $connection_upgrade פירושו מפגשים דביקים: לקוח אחד תמיד פוגע באותו עובד. ללא זה, חיבורי WebSocket עלולים להישבר בעת מעבר בין עובדים.

לאיזון עומסים של מספר מופעי NodeJS ב-Nginx:

upstream push_backend { ip_hash; # sticky sessions по IP server 127.0.0.1:9011; server 127.0.0.1:9012; server 127.0.0.1:9013; server 127.0.0.1:9014; } location /bitrix/subws/ { proxy_pass http://push_backend; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_read_timeout 3600s; proxy_buffering off; } 

ניפוי באגים ואבחון

ב-Chrome DevTools → Network → סנן WS — מציג את כל חיבורי ה-WebSocket עם מסגרות נתונים. דרך curl (לחיצת יד בלבד):

curl -v \ -H "Upgrade: websocket" \ -H "Connection: Upgrade" \ -H "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==" \ -H "Sec-WebSocket-Version: 13" \ https://example.ru/bitrix/subws/ # Ожидаемый ответ: HTTP/1.1 101 Switching Protocols 

מידע נוסף על הפרוטוקול בויקיפדיה.

שיטות ניפוי באגים נוספות
  • יומני NodeJS push-server: בדקו את הפלט של config.json או { "cluster": { "workers": 4, "sticky": true } } .
  • ודאו שפורט 9011 פתוח: sticky: true.
  • אם משתמשים ב-SSL, ודאו ש-Nginx מעביר את כותרת upstream push_backend { ip_hash; # sticky sessions по IP server 127.0.0.1:9011; server 127.0.0.1:9012; server 127.0.0.1:9013; server 127.0.0.1:9014; } location /bitrix/subws/ { proxy_pass http://push_backend; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_read_timeout 3600s; proxy_buffering off; } הנכונה.

שגיאות נפוצות ופתרונות

בואו נסתכל על כמה בעיות נפוצות בהגדרת WebSocket. ראשית, החיבור נופל כל 60 שניות. סיבה: curl -v \ -H "Upgrade: websocket" \ -H "Connection: Upgrade" \ -H "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==" \ -H "Sec-WebSocket-Version: 13" \ https://example.ru/bitrix/subws/ # Ожидаемый ответ: HTTP/1.1 101 Switching Protocols ב-Nginx לא מוגדר או ברירת המחדל היא 60 שניות. פתרון — הגדילו את ה-timeout ל-3600 שניות. שנית, WebSocket לא עובד מאחורי Cloudflare. Cloudflare מנתב WebSocket רק בתוכניות בתשלום (Pro+). בתוכנית החינמית — השתמשו ב-long polling או הוציאו את דומיין ה-WebSocket מ-Cloudflare (DNS בלבד). שלישית, שגיאה 400 Bad Request במהלך לחיצת יד. Nginx לא מעביר את כותרת systemctl status push-server לשרת האחורי — בדקו journalctl -u push-server ו-netstat -tlnp | grep 9011. HTTP/2 לא תומך בשדרוג WebSocket — השתמשו ב-HTTP/1.1 בלבד עבור נקודת הקצה של WebSocket.

מה כלול בהגדרת WebSocket

  • ביקורת על תצורת השרת וה-Bitrix הנוכחית (בדיקת מודול X-Forwarded-Proto, גרסת PHP, NodeJS).
  • הגדרת Nginx: פרוקסי WebSocket, SSL, מגבלות חיבורים.
  • התקנה והגדרה של NodeJS push-server: אשכולות, מפגשים דביקים.
  • אינטגרציה עם Bitrix24: כפיית WebSocket, בדיקת גיבוי ל-SSE/Long Polling.
  • אופטימיזציה של מגבלות מערכת: proxy_read_timeout, Upgrade, proxy_http_version 1.1.
  • תיעוד לתמיכה וניטור.
  • הדרכת מנהלים (שעה).

אנו מבטיחים פעולה יציבה: לאחר ההגדרה, אנו מתמודדים עם עומסים של עד 10,000 חיבורים במקביל (מאושר על ידי מקרי בוחן). צרו קשר לייעוץ חינם על הפרויקט שלכם. אנו נעריך את התשתית הנוכחית שלכם ונציע את הפתרון האופטימלי.