همینطور که در مطالب قبلی توضیح دادم، Socket.IO یک راهحل مناسب برای پیاهسازی برنامههای real-time مبتی بر وب است که توسط تکنولوژی NodeJs کار میکنه. در این مطلب من قصد دارم نحوه کار با Socket.IO رو توضیح بدم. شما در آخر این مطلب (اگر خوب بخونیدش :دی) میتونید برنامههای real-time بسیار زیبا/کارایی بسازید که حتی روی Internet Explorer 6 و گوشیهای موبایل هم کار میکنه!
در مورد زبانهایی که در این مطلب صحبت میشه باید بگم که زبان سرور و کلاینت، هر دو، JavaScript هستند و ما تا آخر این مطلب فقط در مورد این زبان و کمی هم HTML صحبت خواهیم کرد. تمامی سورسهایی که در این مطلب کار میشه، بر روی گیتهاب این پروژه هست و میتونید از اونها استفاده کنید.
خب فکر میکنم بهتره بریم سر اصل مطلب. کاری که قراره ما انجام بدیم ایجاد یک چت روم سادهاس که افراد وارد اون میشن و میتونن با هم صحبت کنن، پیغام بفرستن و… .
فقط برای اینکه بهتر بتونید مطلب رو مطالعه کنید و درک اون راحتتر بشه، یک شکل خیلی ساده از نحوه ارتباط کلاینتها با سرور رو میتونید ببینید:

برای بزرگ شدن عکس روی آن کلیک کنید
خب همینطور که میبینید، socket.io ما در واقعا همون NodeJs ما هست که روی یک پورت خاص اجرا خواهد شد. علاوه بر این، ما دو کد مجزا خواهیم داشت، کد سرور که وظیفه ارسال و دریافت پیغام از کاربران رو داره و یک کد کلاینت که بر روی مرورگر کاربران ما اجرا خواهد شد.
در زبان JavaScript و همینطور NodeJs، اکثر فعالیتهایی که انجام میدیم توسط یه سری رویداد یا Event انجام خواهد شد. مثلا این رویدادها رو در نظر بگیرید:
۱- وصل شدن یک کاربر جدید به سرور
۲- قطع شدن کاربر از سرور
۳- پیغام جدید از کاربر
و…
به کمک خاصیت Event-Based بودن NodeJs و این رویدادها، میتونیم برنامه چت خودمون رو کامل کنیم.
کد سرور ما فقط ۱۰ خط خواهد بود. تمام کاری که این کد انجام میده نگهداری آخرین پیغامها، دریافت پیغام از کاربران و ارسال اون به همه کاربران آنلاین دیگه و در نهایت حذف کردن یک کاربر در صورت بستن مرورگر (یا در حالت کلی قطع شدن ارتباطش با سرور) از لیست کاربران آنلاین هست.
دو رویداد بسیار مهم در socket.io، رویداد اتصال یک کاربر جدید و قطع شدن یک کاربر هست که به ترتیب با نامهای connection و disconnect با اونها میشه کار کرد.
کد زیر مربوط به سرور چت هست:
در کد بالا، ما اول به رویداد connection گوش میکنیم و به محض وصل شدن یک کاربر جدید، به دو رویداد disconnect (برای زمان قطع شدن ارتباط) و message (برای زمانی که کاربر پیغام جدیدی ارسال میکند) هم گوش میدیم تا زمانی که اون رویداد برای ما ارسال بشه. آرایهای به نام buffer لیست ۱۵ پیغام آخر ارسال شده توسط کاربران را نگهداری میکنه و هنگامی که کاربر جدیدی به سرور ما وصل میشه، آرایه برای اون هم ارسال میشه.
برای اجرا کردن سرور، باید NodeJs به همراه بسته socket.io بر روی سیستم ما نصب باشه. NodeJs رو میتونید از این آدرس دانلود کنید، بعد از نصب به Command Prompt/Terminal برید و دستور زیر رو تایپ کنید:
npm install socket.io
این دستور آخرین نسخه socket.io رو برای شما نصب میکنه. بعد از اینکه با موفقیت همهچی انجام شد میتونید سرور رو اجرا کنید. کد server.js رو میشه اینطوری اجرا کرد:
node server.js
حالا باید سرور چت شما روی پورت ۳۰۰۰ اجرا بشه. شما باید خروجی مشابه تصویر زیر رو داشته باشید:

حالا میرسیم به کد سمت کاربر یا کلاینت. این کد وظیفه وصل شدن و ارسال و دریافت پیغام رو داره.
همینطور که میبینید این کد هم خیلی ساده به سه رویداد message، announcement و history گوش میکنه. اینها در حقیقت رویدادهایی هستند که خود ما از روی سرور اونها رو ارسال میکنیم به کاربرها، حالا اینطرف، روی کلاینت به این رویدادها گوش میکنیم و بعد از دریافت کردن اون رویداد و اطلاعات مربوطه، فعالیت مرتبط با اون رویداد رو انجام میدیم (مثلا اضافه کردن پیغام به لیست)
در آخر باید بگم که حتما به این مخزن روی گیتهاب سر بزنید چون تمام کد بر روی این مخزن وجود دارد: https://github.com/afshinm/socket.io-chat-server
سوال، نظر، پیشنهاد!
آخرین دیدگاهها