PracticU

בניית צ'אט באתר

בלי כתוביותעם כתוביות
PracticU › קורס NodeJS › בניית צ'אט באתר
מילון מושגים:
מערך - מבנה נתונים שמאחסן אוסף ערכים מאותו סוג ברצף, שאפשר לגשת אליהם לפי מספר מיקום (אינדקס).
לולאה - מבנה בקרה שחוזר על קטע קוד שוב ושוב כל עוד תנאי מתקיים או עבור כל פריט באוסף.
ממשק - נקודת מגע בין רכיבים: ממשק משתמש שבו אדם מפעיל תוכנה, או ממשק תכנותי שמגדיר אילו פעולות רכיב אחד חושף לאחר.
כפתור - רכיב בממשק המשתמש שהמשתמש לוחץ עליו כדי להפעיל פעולה, כמו שליחת טופס או מעבר לדף אחר.
טופס - אזור בממשק שבו המשתמש מזין נתונים בשדות ושולח אותם, למשל טופס הרשמה או התחברות.
CSS - שפת עיצוב שקובעת את המראה של דפי אינטרנט: צבעים, גופנים, מיקום וסידור הרכיבים.
פיקסל - נקודת הצבע הקטנה ביותר שמרכיבה תמונה או תצוגה על המסך.
דפדפן - תוכנה שמציגה דפי אינטרנט ומריצה את הקוד שבהם, ומאפשרת לגלוש בין אתרים, למשל Chrome או Firefox.

בניית צ'אט באתר
מרחיבים את הדוגמה של Socket.io לצ'אט פשוט שבו כל לקוח מדבר עם כולם: השרת מקבל הודעה ומשדר אותה לכל הלקוחות המחוברים.
השלבים העיקריים
1. שליחה לכולם בשרת: אפשר היה לשמור את כל הסוקטים במערך allSockets, להוסיף סוקט בכל התחברות ולרוץ עליו בלולאה עם emit. אבל אין צורך, כי socketServer.sockets כבר מכיל את כל הסוקטים המחוברים, וקוראים לו emit ישירות.
2. פישוט ההודעה: כשמגיעה הודעה מלקוח, מדפיסים אותה בקונסול ושולחים את אותה הודעה לכל הלקוחות, גם לזה ששלח אותה.
3. ממשק בלקוח: כפתור Connect וכפתור Disconnect שקורא לפונקציה disconnect של הסוקט. כותרת צ'אט, תיבת טקסט עם placeholder של "message" וכפתור Send בתוך form, כשהשדה מסומן required כדי לחייב להקליד משהו.
4. שליחת ההודעה: לתיבת הטקסט נותנים id, קוראים את value שלה ושולחים עם emit. אחר כך מאפסים את התיבה וחוזרים עם focus אליה.
5. תצוגת ההודעות: div בשם divMessages מקבל את ההודעות שמתקבלות מהשרת, עם ירידת שורה בין הודעה להודעה. מעצבים אותו ב-styles.css: רוחב 90 אחוז, גובה 300 פיקסלים, מסגרת של פיקסל אחד, ו-margin ו-padding של 10.
6. בדיקה עם שני לקוחות: בשני דפדפנים מתחברים, ושליחת הודעה מכל אחד מהם מגיעה לשניהם. אחרי שאחד מתנתק, רק מי שנשאר מחובר מקבל הודעות. אחרי חיבור מחדש הכל עובד שוב.
טעויות נפוצות
- כפתור בתוך form מנסה לבצע submit ומרענן את הדף, ולכן צריך להגדיר אותו כ-type="button".
- שגיאת כתיבה בשם ה-div (divMessages) מנעה את הצגת ההודעות עד שתוקנה.
כך השרת יכול להזרים הודעה יזומה לכל הלקוחות בלי שכל לקוח יבקש אותה, וזהו הבסיס לצ'אט.

פרקי ההרצאה: בניית צ'אט באתר

  1. 00:00

    הפיכת האפליקציה לצ'אט פשוט

  2. 00:45

    שליחה לכל הסוקטים בלולאה

  3. 01:26

    שידור לכל הלקוחות עם sockets.emit

  4. 02:21

    לחצן Disconnect וממשק הצ'אט

  5. 03:27

    טופס עם required ואזור הודעות

  6. 04:03

    עיצוב עם קובץ CSS

  7. 04:47

    ניתוק דרך הסוקט

  8. 05:31

    שליחת הטקסט מהתיבה וניקויה

תמלול ההרצאה: בניית צ'אט באתר

הטקסט המלא של הדקות הראשונות בהרצאה «בניית צ'אט באתר» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:05

    בואו ניקח את האפליקציה הזאת ונהפוך אותה לצ'אט. כל הלקוחות יכולים לדבר עם כל הלקוחות. הצ'אט הכי פשוט שיכול להיות. אבל כאשר לקוח שלח לנו הודעה, קודם כל הוא התחבר ואז הוא שלח הודעה, אנחנו החזרנו לו את ההודעה.

  2. 00:23

    איך אנחנו מחזירים את ההודעה לכל הלקוחות? אז שיטה אחת תהיה לפתוח פה, ניקח לזה All Sockets, וזה פשוט יכול להיות איזשהו מערך, וברגע שלקוח מתחבר נוסיף ל-all sockets את ה-socket אליו, זה בעצם הפקודה שמוסיפה למערך את ה-socket שקיבלנו פה, ואז במקום לשלוח לו את ההודעה נרוץ על כל ה-sockets

  3. 00:57

    של כל המערך, const, נקרא לזה s of all sockets, נבצע s נקודה אמית ואז אנחנו שולחים את ההודעה לכל הלקוחות המחוברים כמובן ברגע שאנחנו מתנתקים אז אנחנו צריכים לחפש את אותו הסוקט ולהיפטר ממנו אבל אין לנו צורך לעשות את זה בואו רגע נוריד את כל הקודים האלה

  4. 01:26

    מפני שיש לנו את socket server.sockets שאנחנו רואים פה, זה כל הסוקטים המחוברים. כל מה שאנחנו צריכים לעשות זה emit מכל הסוקטים המחוברים.

  5. 01:46

    אז זה בעצם זהה ללולאה שדיברנו עליה מקודם. עכשיו ה-server תומך סליחה, הסרבר תומך בשליחה של ההודעה לכל הלקוחות. בואו טיפה נשכלל את זה, כאן יהיה Client has been connected, Total Clients, Client has been disconnected, זה בסדר, Client Message זה בסדר, אבל ניפטר מזה ופשוט

  6. 02:13

    נשלח לו את אותה המודעה. Client שלח לי איזושהי הודעה, הדפסתי אותה על הקונסול ואני שולח אותה לכל הלקוחות. פה סיימנו את צעד בואו נעבור וטיפה נצ'קלל את צד הקליינט נעשה פה עוד לחצן של דיסקונקט יש לנו פה דיסקונקט אחלה בואו ניקח כאן איזה בר נעשה פה אולי סוקט אייר צ'אט איזושהי הודעה

  7. 02:51

    כזאת ויש לנו פה את הלחצן send ניקח input טקסט בוקס ניקח פלייס הולדר נשים פה מסג׳ נעטוף את כל הסיפור הזה באיזשהו פורם האמת אפשר לעטוף לא נעטוף את הכל נעטוף רק את זה פורם ואז מה שאנחנו יכולים לעשות ולשים כאן רקוויירד ואז זה אומר שאי אפשר ללחוץ על הלחצן כי הוא נמצא בתוך פורום בלי באמת

  8. 03:38

    למלא איזושהי ולידציה קטנטנה כזאת ועכשיו כאן נעשה איזה דיב של כל המסג'ז שאליה אנחנו בעצם רוצים להוסיף את המסג' שהיוזר שלח ניתן לה אולי טיפה סטיילינג אחרת יהיה לנו קשה לראות את זה סטיילס נקודה css ונצרף את הסטיילס css לפה ויש לנו לינק רייל טייל שיט ויש לנו פה href שווה סטיילס css מעולה אפשר להיפטר גם

  9. 04:29

    מרווחים מיותרים ונראה לי שזה יעשה את העבודה אורייט בואו ניגש לאינדקס יש לנו פה את הלחצן קונקס בסדר, בואו נשכפל ללחצן ה-disconnect שב-disconnect אנחנו קוראים לפונקציה disconnect דרך הסוקט בצורה כזאת, אין צורך בשום דבר כאן.

  10. 05:06

    דבר נוסף, יש לנו את ה-send message ויש לנו את זה. send message שולחת את ההודעה, ההודעה צריכה להיות ההודעה שהתקבלה מתיבת הטקסט, אז בואו ניקח כאן const וניתן לתיבת הטקסט id text box message ואז יש לנו document get element תביא לי תיבת הטקסט

  11. 05:38

    ואני רוצה לשלוח את הvalue שנכנס בתיבה. זה שולח לנו את ההודעה, אפשר מיד אחר כך to clear it. בואו נלך לvalue אכפס אותו ופוקוס בשביל שהפוקוס ייכנס בחזרה לתיבה.

  12. 05:59

    מה עוד אפשר לבצע?

לקורס המלא: קורס NodeJS אונליין בעברית

ההרצאה הקודמת: שימוש ב-Socket.io בצד לקוח

ההרצאה הבאה: הסבר על מיקרוסרביס - Microservice

הרצאות קשורות מקורסים אחרים

  • בניית אתר אינטרנט אמיתי לחנות חיות - דף פנימי באתר
  • בניית מודל
  • בניית שלב - חלק 1
  • בניית חלון מאפס

קורסים נוספים במסלול

  • קורס יסודות HTML - בניית אתר אינטרנט פשוט
  • קורס CSS 3 - בדגש על Flex & Grid
  • קורס Javascript כולל JQuery
  • קורס ג'אווה סקריפט מעשי - JavaScript
  • קורס TypeScript
  • קורס ריאקט - React