لوگوی وبسایت
تمام آموزش های وبسایت رایگان می باشد ، پس از صفحات مختلف سایت دیدن فرمایید .

ساخت سوکت سرور چت با استفاده از node.js

بنام خدا و با عرض سلام و خسته نباشید . قراره در این آموزش با استفاده از node.js یک سرور سوکت چت روم را بسازیم و با آن کیف ! کنیم .

توصیه من این است که حتما یک آشنایی قبلی با node.js داشته باشید .

شروع کار ساخت سوکت چت …

ابتدا ما به ماژول net در nodejs نیاز داریم تا سرور سوکت را بوسیله ی آن ، اجرا کنیم برای این کار عبارات زیر را در فایل .js امان وارد میکنیم.

ما به سوکت کاربران نیاز داریم پس باید یک متغیر بسازیم که تمام سوکت ها در آن قرار بگیرند . این متغیر یک ارایه است که ورودی های آن ، یک ارایه میباشد که متغیر اول آن سوکت کاربر و متغیر دوم ، نام کاربری آن میباشد .

حالا باید تعریف کنیم که کد های ما زمانی اجرا شوند که یک کاربر به سرور ما متصل شد پس از ایونت connection استفاده میکنیم .

خوب حالا یک آرایه برای کاربر جدید میسازیم که مشخصات آن ( نام کاربری و سوکت ) در آن قرار بگیرد .

حالا باید به کاربر اطلاع دهیم که نام کاربری اش را وارد کند :

کاربر قطعا یک سری رشته ها را برای ما ارسال میکند ( فعلا رشته ) پس باید در یک ایونت ثبت کنیم اگر کاربر دیتا ایی را ارسال کرد فلان کار را انجام دهد .

توجه کنید که دیتا ها را به رشته تبدیل کنید و حواستان به \n و \r و \t و .. باشد پس ما از یک replace استفاده میکنیم .

حالا باید ببینیم که این کاربر وارد شده است یا نه چون اگر کاربر وارد شده باشد ، باید به عنوان چت متن مورد نظر ارسال شود در غیر اینصورت باید به عنوان نام کاربری در نظر گرفت . برای این کار در آرایه ی سوکت ها به دنبال ایندکسی میگردیم که سوکت آن با سوکت کاربر برابر باشد ، اگر سوکت مورد نظر پیدا نشد ، پس کاربر وارد نشده است .

خوب حالا ما میدانیم که کاربر وارد شده است یا نه ، در صورتی که کاربر وارد شده نباشد باید چک کنیم که آیا رشته ارسالی در نام های کاربری قبلی موجود است یا نه ( نمیشود ۲ کاربر ، ۱ نام کاربری داشته باشند ! )

برای این کار در تمام ایندکس های آرایه سوکت ها به دنبال نام کاربری برابر با نام کاربری ارسالی کاربر میگردیم ، اگر پیدا شد پس نام کاربر وجود دارد و باید کاربر ما باید یک نام کاربری دیگری انتخاب کند .

خوب حالا ما باید در صورتی که نام کاربری وجود نداشته باشد ، کاربر را در لیست سوکت ها قرار دهیم . یک کار باحال هم انجام میدیم ، به تمام کاربر ها هم میگیم که کاربر جدید وارد شد ! برای این کار متن رو به تمام کاربر ها write میکنیم !

خوب ما یک شرط داشتیم if(!has_socket){… که نیاز به else هم دارد ، که در آن کاربر مد نظر وارد شده است و درحال چت کردن میباشد ، پس ما باید متن کاربر رو به تمام کاربر ها ارسال کنیم ( با نام خودش ) . برای بدست آوردن نام کاربری ، باید تمام سوکت ها را چک کنیم و سوکتی که با سوکت کاربر یکسان بود را استخراج کنیم و نام کاربری را از آن بدست بیاوریم .

خوب کار ما تمام است ، حالا باید سرور را شروع کنیم و یک پورت را اشغال کنیم پس از کد زیر استفاده میکنیم .

برای اتصال به چت روم هم در ترمینال بعد از ران کردن فایل .js امان ، عبارت telnet localhost 4001 را وارد میکنیم که localhost ای پی ما  و ۴۰۰۱ پورت ما هست .

از چت لذت ببرید 🙂

دانلود “سورس چت سوکت سرور nodejs” server_auth.js – Downloaded 75 times – 1 KB

بر چسب های پست : , , , , , ,
مطالب مرتبط
سلام دوستان امیدوام حالتان خوب باشد . در این آموزش قرار است یک سیستم پوش نوتیفیک ...
۱۳ اسفند ۹۴
7 دیدگاه
سلام دوستان امیدوارم حالتان خوب باشد . محمد حسینی راد هستم و با یک آموزش جذاب ! ...
۰۷ دی ۹۴
3 دیدگاه
17 دیدگاه برای “ساخت سوکت سرور چت با استفاده از node.js”
  1. nima_j79 گفت:

    سلام و عرض ادب

    از سایت بسیار آموزنده شما متشکرم
    بنده برنامه نویس اندروید با زبان B4A هستم.
    کاش میشد سورس اکلیپس را همراه با B4A هم ارائه میکردید.
    موردی هم که مهمه اجرای فایل های سرور در هاست هست ، اگر امکانش هست نحوه اجرای اون ها در هاست رو هم آموزش بدید.
    یه سوال:
    فکر کنم نوشته بودید این سورس اختصاصی نیست. یعنی چی ؟
    و اینکه بنده با node.js آنایی ندارم ، آیا همین فایل ها را استفاده کنم به نتیجه میرسم ؟
    برنامه نویس مبتدی نیستم اما تا الان سوکت کار نکردم.

    پیشاپیش از توجه و راهنمایی های شما ممنونم
    نیما ج

    1. سلام به شما دوست عزیز و با عرض خسته نباشید .
      پرسیدید چرا سورس های b4a قرار نمیدهم ؟ واقعیتش من خودم جاوا کار میکنم و سعی میکنم سورس ها و آموزش ها یی که قرار میدهم شخصی باشند پس اطلاعات کافی درباره ی سورس های b4a ندارم .
      و اینکه من توی آموزش ها هم گفتم که nodejs روی هاست های معمولی اجرا نمی شود و نیاز به این دارد سرور ران کنید .

  2. ehsaun_kkt60 گفت:

    سلام
    من نود.جی اس رو ران کردم و فایل رو اجرا کردم. حالا باید چکار کنم؟؟؟

    وقتی server_auth.js رو ران میکنم دیگه نمیتونم توی cmd چیزی تایپ کنم و دستور telnet localhost 4001 رو بنویسم.. یعنی هیچ اتفاقی نمی افته ، نه هنگ میکنه نه هیچی!!!

    توی مروگر هم http://localhost:4001/ باز کردم هیچ اتفاقی نیافتاد ولی وقتی رفرشش میکنم توی cmd یه سری عدد مینویسه.

    ممنون میشم راهنمایی کنید و یه عکس از اجراش بگذارید

    اگه امکانش هست پاسخ رو میل کنید

    مچکرم

    1. سلام دوست عزیز
      وقتی شما سرور رو ران میکنید به اون پنجره cmd تون دیگه دست نزنید چون قرار اطلاعات سرور رو لوگ کنه . یک تب cmd جدید باز کنید و تل نت رو اونجا بزنید.
      اون اعدادی هم که بعد از باز کردن صفحه مرورگر باز نمایش داده می شوند مربوط به همون لوگ ها هستند .
      برای پایان سرور هم ctrl+c را در تب مربوط به سرور فشار دهید سپس تب را ببندید

  3. pejmannikravan25 گفت:

    عالی بود.
    اما متاسفانه یه اشکالی که داره.
    وقتی مثلا با اندروید به سرور وصل میشیم مشکلی نداره و خیلی راحت میشه چت کرد حتی روی سرور ویندوز هم تست شد.
    اما وقتی از برنامه خارج میشیم و دوباره میخوایم یوزرنیم رو بدیم ، فایل CMD اررور میده و سوکت رو میبنده.
    (موقع خروج از برنامه سوکت هم Close میکنم)

    1. کد کامل نیست ، برای زمان disconnect باید سوکت حذف بشود ولی خوب چون حذف نمیشود ، تداخل بین سوکت ها بوجود می آید.

      1. pejmannikravan25 گفت:

        ببخشید.
        چطور باید سوکت حذف بشه؟؟
        درضمن برای اجرا نگه داشتن سوکت باید از همون CMD استفاده بشه دیگه. درسته؟؟

        این هم عکس ارروی که میده:
        http://s6.picofile.com/file/8226076018/Untitled_1.jpg

        1. این بخاطر این است سوکت حذف کردیم و این مشکل پیش میاد .
          بنده یک مقاله برای همین سوال شما خواندم و آنجا آورده بودند که بهتره سوکت رو با استفاده از کد زیر ببندیم ، نه حذف کنیم.

          socket.end();

  4. mzelecom گفت:

    سلام
    من این برنامه رو اجرا کردم.
    به خوبی کار کرد ولی یه مشکل دارم وقتی کلاینت از سرور قطع میشه خطا میده و سوکت بسته میشه.
    چجوری میشه کاری کرد که برنامه به کار خودش ادامه بده.
    ممنون

    1. سلام
      این سرور فقط جهت آموزش شروع کار nodejs قرار گرفته است .
      هر وقت یک کلاینت سوکت را ببندد باید سوکت این کلاینت از لیست سوکت ها حذف شود . این کار در وب سوکت بسیار راحت است اما در سوکت سرور یک مقدار دردسر دارد .

      شما توی کد زمانی که برای یک سوکت مقادیر را میخواید ارسال کنید ، باید این عملیات را در یک try catch قرار بدهید که اگر با اروری مواجه شدید بتوانید ارور را کنترل کنید که برنامه crash نکند و اگر خواستید سوکت را از لیست سوکت ها حذف کنید.

  5. rayejir13 گفت:

    سلام . ممنون از آموزش عالی تون .
    ولی یک سوال داشتم :
    میشه بگین چه جوری می تونم بگم که متن رو به کاربری که نامش ‘۱’ ارسال کنه و کاربر های دیگه اون متن رو نبینن؟

    1. باید توی لیست سوکت ها سرچ کنید و سوکت مد نظر رو پیدا کنید و اطلاعات به اون بفرستید

      1. rayejir13 گفت:

        میشه یکم بیشتر توضیح دهید

        1. rayejir13 گفت:

          یا تکه ای کد یا نام عملیات رو بگین

  6. مهران گفت:

    با سلام
    بنده در رشته طراحی و گرافیک درس خوندم و هیچ اطلاعاتی در مورد برنامه نویسی نمیدانم اگه کسی برنامه نویسی میدونه و حاظر با بنده در ساخت بازی انلاین یاری کنه به ایمیل زیر پیام بده
    Nima.alie1395@gmail.com
    با تشکر

  7. amir354 گفت:

    سلام
    خسته نباشید

    من از ویندوز ۱۰ استفاده میکنم و ویندوز ۱۰ talnet server نداره
    چطوری میتونم با remote desktop connect بشم؟

  8. شهاب گفت:

    سلام
    می تونیم با node و php به صورت ترکیبی تو یک پروژه کار کنیم؟
    این کارا رو میشه تو یه سرور انجام داد؟
    برا قسمت چت یک سایت که با php نوشته شده روش پیشنهادیتون چیه؟
    از نظر تهیه سرور node.js و کانفیگش تو ایران چجوری اقدام کنم؟
    ببخشید سوالات زیاد شدن !

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

ورود به حساب کاربری
بستن این پنجره