برنامهنویسی Real-Time با Socket.IO و Node.js!

با Socket io و Node.js یک برنامه چت بلادرنگ بسازید With Automated Testing

می‌توانید آن را فورک کنید یا از خودتان (آزمایشی که به GitHub خود فشار داده‌اید) استفاده کنید تا تست‌های خودکار را با استفاده از ابزار CI تنظیم کنید. ما قصد داریم این آموزش را گسترش دهیم تا به شما نشان دهیم چگونه می توانید تست ها را خودکار کنید. اما قبل از آن، بیایید Recycler view، Adapter، فیلد پیام و دکمه send را راه‌اندازی کنیم. نمونه به دست آمده را به ArrayList پیام‌ها اضافه کنیم و به adapter بگوییم که Recycler View را بروزرسانی کند. اکنون فایل را ذخیره کرده و ببندید، بعد مستقیما به قسمت بعدی بروید. نکته آخر اینکه اگر هنوز یک کلید API از DarkSky دریافت نکرده‌اید، یکی را تهیه کنید.

یک route در مسیر (/) ایجاد می کنیم که محتوای فایل index.html را return می کند. علاوه بر Express و Socket.IO بری ایجاد سرور مدنظرمون به ماژول HTTP نیاز داریم. متغییر server یک object از متود createServer که متغییر app را به عنوان parameter دریافت کرده است return می کند و همچنین متغییر server به عنوان پارامتر  در متود listen ماژول socket.io مورد استفاده قرار می گیرد. ایتدا یک فایل با عنوان Server.js را ایجاد کنید و کد زیر را داخل آن قرار دهید. اول از همه باید Nodejs و NPM رو سیستم شما نصب باشه و احتمالا اکر در گذشته با این پلتفرم کار کردین چالشی ندارید و میریم برای نصب Epress که (حتما میدونید!) با دستور زیر به صورت Local به دایرکتوری پروژه اضافه میشه. در اینجا می توانیم با مقدار دهی اولیه npm شروع کنیم تا راه اندازی پروژه جدید خود را دریافت کنیم.

Sockets (سوکت ها) یک حالت انتزاعی و کوچک تر از یک شبکه هستند که کار کردن و مدیریت آن ها راحت تر ست. Socket.IO امکان ایجاد یک ارتباط کاملا دوطرفه real-time و البته رویداد محور را فرآهم می کند. بر روی هر پلتفرم و مرورگری می تواند مورد استفاده قرار گیرد البته همراه با سرعت و قابلیت اطمینان بالا. ایجاد فرهنگ سازمانی برای شرکتی با بیش از ۵۰۰ کارمند کاری بسیار دشوار خواهد بود ولی حتی آنچه از این مسئله نیز دشوارتر به حساب می آید پایه ریزی درست و مطابقت دادن افراد با فرهنگ یاد شده است. اینکار در زمانی که یک شرکت نوپا و کوچک محسوب می شود چندان سخت نیست و شاید ضروری هم نباشد ولی با رشد آن صورت پذیرفتنش الزام می یابد. حتی اگر سرور هیچ محتوای HTML را ارائه ندهد، برای گوش دادن به هرگونه اتصال ورودی به یک مسیر بسیار ساده نیاز خواهیم داشت.

تمام تلاش ما در برند reactapp در کنار آموزش با کیفیت و استفاده از دانش روز، اضافه کردن چاشنی تجربه چندین ساله فعالیت در پروژه های داخلی و خارجی بوده. زمانی که شما به یادگیری اختصاص دادید برای ما اهمیت بسیار بالایی داره و به همین دلیل سعی میکنیم متحوای تولید شده، غنی، پر بار و در راستای نیاز های بازار کار باشه. دوباره node index.js، را اجرا کنید، اگر از قبل در حال اجرا است، پروسه را با فشار دادن control + c مجددا راه اندازی کرده و دوباره node index.js را اجرا کنید. با این روش می توانید ببینید که در کنسول عبارتی با عنوان «اتصال وب سوکت جدید» چاپ شده است یا نه. با Node، از نظر فنی، می‌توانیم سرور وب اصلی خود را از ابتدا کدنویسی کنیم.

روی مرحله “Build Node App” کلیک کنید، باید مرحله اجرا را مشاهده کنید که به طور پیش فرض با تنظیمات اولیه اضافه شده است. و هنگامی که 3001 را در محلی خود باز می کنید، باید برنامه چت خود را در حال اجرا ببینید. هر کسی باید یاد بگیره که چه‌طور کد بزنه چرا که برنامه‌نویسی به شما یاد می‌ده که چه‌طور فکر کنید. یک Socket Listener برای رویداد message به اندروید اضافه می‌کنیم. تمام متدهای مربوط به Recycler view شامل adapter را فراخوانی کرده، و پیاده‌سازی می‌کنیم.

ما از تگ blockqoute در HTML5 برای نمایش نقل قول استفاده می کنیم. هرچند کد زیر گویا است ولی هرجا لازم بوده، توضیحات را آورده ایم. واینمن زمانی که متوجه می شود لینکدین قصد خرید کمپانی اش را دارد، در ابتدا شوکه می گردد. او و همسرش هرگز به دنبال فروش شرکت خود و یافتن مشتری برای آن نبوده اند و البته در سن ۶۰ سالگی وی هنوز هم احساس می نموده که برای بازنشستگی بسیار زود است. من به شخصه بر روی اثری که از همکاری دو کمپانی با یکدیگر پدید می آید متمرکز هستم. با تنها ۱۰۰۰ نفر پرداخت کننده حق اشتراک ماهیانه، بقای کمپانی به نظر بسیار سخت می رسید.

این دوره مملو از پروژه‌های عملی و مثال‌های عملی است تا اطمینان حاصل شود که تجربه‌ای در دنیای واقعی کسب می‌کنید. در پایان دوره، شما برنامه‌های بلادرنگ کاملاً کاربردی خواهید ساخت و اعتماد به نفس برای ایجاد برنامه‌های کاربردی خود را از ابتدا ایجاد خواهید کرد. که سمت کلاینت کاربر می تواند این مقدار را به راحتی دریافت و نمایش دهد. و یک متد emit‌ از socket.io که برخلاف متد on ( که برای گوش دادن به فراخوان های از سمت کلاینت بود ) برای call یا فراخوانی کردن یک event خاص سمت client است. و حالا قسمت جالب کار است که باید به سراغ سوکت نویسی برویم ! قبل از شروع این قسمت باید به این نکته توجه داشته باشیم که Socket.io تماما برروی event ها سوار است و تمامی فعالیت خود را با event مدیریت می کند.

که مشخص کننده آن است که کاربری با نام iman با موفقیت به چت join شده ( چرا که ایونت join از سمت کلاینت emit یا منتشر شده). در خط دوم متد connect مربوط به کلاس Socket را فراخوانی کرده ایم. متد connect وظیفه ارسال درخواست اتصال به آدرس سروری را می دهد که ما زمان مقدار دهی متغیر سوکت به آن داده ایم. ما برای سمت Backend پروژه ساخت چت با اندروید از زبان Node js استفاده می کنیم . این درحالی ست که می توان از زبان های دیگر مانند php‌ هم استفاده کرد اما php با Node js استثنا برای اپلیکیشن چت اصلا قابل مقایسه نیستند چرا که Node js با سرعت بسیار بیشتری نسبت PHP برای کار های آنی یا Real time عمل می کند.

روزگاری که ایده یاد شده شکل گرفت و سپس عملی گشت (ارائه خدمات به صورت آنلاین) تماشای فیلم بر روی کامپیوترها تازه در حال رواج یافتن بود. لیندا دات کام تصمیم گرفت در ازای سرویسی که ارائه می کند هزینه حق اشتراکی ۲۵ دلاری را به صورت ماهیانه دریافت نماید. بنابراین وقتی هر توسعه‌دهنده‌ای کد را به شاخه اصلی شما فشار می‌دهد، خط لوله فعال می‌شود و آزمایش را اجرا می‌کند. حال که همه چیز به درستی کار می‌کند، بهتر است فراموش نکنیم که وقتی سرور ما یک رویداد را مدیریت می‌کند، برخی رویدادهای دیگر را نیز پخش می‌کند، پس آن رویدادها باید در سمت کاربر مدیریت شوند. برای این کار، یک listener برای رویداد userjoinedthechat می‌سازیم.

در نهایت یک تست ساده با فریم ورک Mocha می نویسیم و از طریق Harness CI آن را خودکار می کنیم. اما قبل از هر چیزی، بیایید تا در مورد این کتابخانه پرکاربرد کمی بیشتر بدانیم. Socket.io یکی از کتابخانه های محبوب زبان برنامه نویسی جاوا اسکریپت می باشد که به کمک فناوری وب سوکت ها، یک ارتباط دو طرفه یا Real Time برقرار میکند. این کتابخانه ارتباط بین سرور و کلاینت را به خوبی مدیریت می کند و باعث افزایش سرعت آن می شود. دو بخش اساسی این کتابخانه، سمت سرور در محیط Node.js قرار دارد و بخش دوم در سمت مرورگر اجرا می شود.

طراحی شده با در ایران عزیز - کلیه‌ی حقوق نزد آکادمی آنلاین روکسو محفوظ است و هر گونه کپی‌برداری از مطالب، پیگرد قانونی دارد. در ۲۰۰۷ تصمیم بر این شد تا یک مدیرعامل جهت اداره ی بهتر مجموعه به آن اضافه گردد. به گفته ی خود لیندا "درست در همان زمان بود که او تصمیم گرفت در رفتارها و برخوردهای خود سیاست بیشتری داشته و بروکراتیک تر عمل نماید". ذخیره نام، ایمیل و وبسایت من در مرورگر برای زمانی که دوباره دیدگاهی می‌نویسم. با حساب GitHub خود احراز هویت کنید زیرا کد برنامه شما در آنجا موجود است.

باید بگم اول از همه فایل index.htnl رو ایجاد کنید و کد زیر رو داخل این فایل اضافه کنید تا بیشتر باهم ای فایل رو مورد بررسی قرار بدیم. به کمک این اپلیکیشن، ابتدا در صفحه css-admin-color.html رنگی انتخاب می شود و بلافاصله رنگ زمینه تگ های پاراگراف در css-color.html تغییر خواهد کرد. سروری که برای این کار مورد نیاز است از نود جی اس، اکسپرس جی اس و سوکت استفاده می کند. ارائه ی کتابخانه ای ویدئویی به جای اینکه از افراد درخواست شود تا در دوره هایی مشخص با روال معمول و پیوسته شرکت نمایند، عاملی بوده که سبب گشته شیوه ی آموزشی لیندا دات کام نسبت به سایرین کاملاً متفاوت گردد. درست در همان زمان و در سال ۱۹۹۵ واینمن آدرس ایمیل فردی را مشاهده نمود که به صورت بود و مشتاق شد بداند آیا دامنه ی لیندا نیز برای ثبت کردن در دسترس قرار دارد یا خیر. وی این دامنه را خریداری و وبسایتی تحت آن راه انداخت تا از طریقش بتواند با دانش آموزان و همچنین خوانندگان کتاب خود ارتباط برقرار نماید.

این مجموعه‌ای از نیازها است که به دنبال آن فراخوانی یک برنامه جدید ExpressJS انجام می‌شود. آنچه که در اینجا بسیار جالب است، فراخوانی socketIo() برای شروع یک نمونه جدید با عبور از شی سرور است. در این مقاله، ما یک برنامه چت اولیه ایجاد خواهیم کرد که به کاربران این امکان را می دهد تا هم زمان با یکدیگر صحبت کنند. اینکه اعضا و کارمندان شرکت همانند یک خانواده با یکدیگر در تعامل باشند همواره برای لیندا حائز اهمیت بوده و او حتی همیشه تلاش داشته تا افراد تحت استخدام خود را با اسم کوچک بشناسد و صدا بزند. ولی رشد سریع کمپانی و رسیدن تعداد کارمندان به عدد ۵۰۰، رفته رفته چالش هایی تازه را پدید می آورد و سبب می گردد واینمن در ایده آل های خود بازنگری نماید.

اما رفته رفته به این نتیجه می رسند که این فروش و ادغام دو کمپانی با یکدیگر احتمالاً امری منطقی و موثر خواهد بود. هر دو شرکت به نوعی تلاش داشته اند به افراد کمک کنند تا وضعیت شغلی خود را بهبود بخشند و احتمالاً در کنار یکدیگر بسیار بهتر از گذشته می توانند این هدف را محقق کنند. پس از گذراندن این دوره، شما عزیزان به صورت کامل به این کتابخانه در محیط Node.js مسلط خواهید شد تا بتوانید با استفاده از آن ، پروژه های جدید و با سرعت بسیار بالا در پردازش داده توسعه دهید. همانطور که در اسکرین‌شات زیر می‌توانید ببینید، همه چیز به درستی کار می‌کند و پیام‌ها برای هر دو طرف نمایش داده می‌شوند. دقت کنید که با چندین کاربر دیگر نیز می‌توانیم وارد شویم، اما باید از شبیه‌ساز‌های دیگر استفاده کنیم.

"گوش دادن به پورت 4001" که تأیید می‌کند همه چیز خوب کار می‌کند. رویداد اتصال یک شی سوکت را برمی‌گرداند که به تابع برگشت تماس منتقل می‌شود. با استفاده از سوکت گفته شده می‌توانید داده‌ها را در real-time برای کلاینت ارسال کنید. سرور از Socket.IO برای انتشار هر 10 ثانیه یک پیام استفاده می‌کند و کلاینت همان پیام را از طریق یک سوکت در real-time گوش می‌دهد. آیا من می‌توانم ری‌اکت را ترکیب کنم وقتی که می‌توانم HTML را به راحتی با Pug یا Jade انجام دهم؟ بله، بسیار جالب است که ببینید ری‌اکت چگونه می‌تواند در کنار Socket.IO کار کند. همان طور که در console سرور مشاهده می کنید عبارت “Connected succesfully to the socket” لاگ گرفته شده است.

از نظر سرور کار ما تمام شده است و کد کامل app.js باید به این شکل باشد. برای پیگیری این آموزش شما باید یک درک اساسی از جاوااسکریپت، node.js و ExpressJS داشته باشید. در این مقاله با برخی از مفاهیم اساسی شروع خواهیم کرد تا از طریق کاوش آنچه Socket.IO و React هنگامی که با هم جفت شوند، می‌توانند برای ما انجام دهند. در پایان مقاله شما یک برنامه فوق‌العاده ساده real-time خواهید ساخت. اگر سرور شما در حال اجرا باشد باید دستور زیر را در log کنسول ببینید.

و callcback که مشخص می کند زمان call شدن این‌ event چه دستوراتی اجرا شود. برای یادگیری یک مهارت جدید به صورت جامع و کامل، شما دانشجویان عزیز نیازمند دوره ای هستید که نیاز های شما را به خوبی تشخیص دهد و در عین حال هدفمند باشد. به همین خاطر ما در آکادمی برنامه نویسی کدیاد، دوره آموزش Socket.io در Node.js را برای شما عزیزان طراحی کردیم که گامی بزرگ در حوزه برنامه نویسی خود بردارید. پروژه محور بودن این دوره یکی از ویژگی های شگفت انگیز این دوره آموزشی می باشد که در حین آموزش بتوانید پروژه های زیادی با Socket.io توسعه دهید. این دوره آموزشی جذاب برای برنامه نویسان وب و توسعه دهندگان جاوا اسکریپت بسیار مناسب می باشد. شما عزیزان با گذراندن این دوره آموزشی کاربردی، می توانید به یک پله بالاتر در Node.js صعود کنید و می توانید با کتابخانه شگفت انگیز Socket.io به راحتی برنامه هایی بنویسید که به صورت Real Time اطلاعات را ارسال و دریافت کنند.

و واژه هرنوع به این خاطر به کار رفته که این event ها می توانند به هرتعدادی پارامترهای ارسالی و دریافتی داشته باشند که در هر دو سمت کلاینت و سرور به صورت قراردادی مدیریت می شود. سپس متغیر دیگری با نام nickname تعریف کردیم که درواقع محتوی آن همان مقداری است که از اکتیوتی قبل یعنی MainActivity.kt به اکتیوتی جاری یعنی ChatBoxActivity.kt ارسال شده است. در این آموزش، بیایید نحوه استفاده از Socket.IO و Node.js و ایجاد یک برنامه چت ساده را بیاموزیم. ما یک برنامه اصلی Node.js را راه اندازی می کنیم و وابستگی های لازم را نصب می کنیم. با رابط چت اولیه و اضافه کردن یک ویژگی ساده که در آن کاربران به راحتی می توانند با کمک اتصال Socket.IO پیام ارسال و دریافت کنند. Socket.io یک کتابخانه پرکاربرد است که به ارتباط بلادرنگ بین سرویس گیرندگان وب و سرورها کمک می کند.

در حال حاضر ما فقط یک پیام ساده روی کنسول نمایش خواهیم داد. Socket.IO توسط شرکت‌ها و توسعه دهندگان بی شماری مورد استفاده قرار می‌گیرد و راه خود را از طریق برنامه‌های پیام رسان فوری پیدا کرده است. آنچه جالب‌تر است توانایی WebSocket برای کار با یک مدل مبتنی بر رویداد است. سرور و کلاینت می‌توانند در برابر رویدادها و پیام‌ها واکنش نشان دهند. حال زمانی که پروژه را همزمان برروی بیش از یک emulator اجرا کنید خواهید دید با join شدن هر دیوایس یک Toast نمایش داده می شود که محتوی آن از سرور و با ایونت userjoinedthechat دریافت شده و نمایش داده می شود. در این پست از تجاری اپ ما یک سیستم چت real time برای پلتفرم android با استفاده از nodeJs و Socket.io پیاده میکنیم.

لیندا دات کام قالبی معین و کارآمد را برای دوره های آموزشی اش پدید آورده و سپس کوشش کرده تا از نظر موضوعی نیز در بین مطالب مورد تدریس خود تنوع ایجاد نماید. روزگاری در وب سایت مورد بحث تنها ۲۰ دوره آموزش ویدئویی آنلاین وجود داشت، اما اکنون این رقم به ۶۳۰۰ رسیده که شامل ۲۶۷.۰۰۰ ویدئوی آموزشی می گردد. کسب و کار لیندا پس از چند سال توانست ۳۵ فرصت شغلی را ایجاد و درآمدی ۳.۵ میلیون دلاری را فراهم کند. اما در سال ۲۰۰۱ و پس از انفجار حباب دات کام و حوادث مرتبط به یازده سپتامبر، تمایل افراد به یادگیری دروس طراحی وب کاهشی عجیب پیدا کرد، تا جایی که واینمن و همسرش در ادامه دادن مسیر مردد شده بودند. در ادامه درون متد onCreate یک try / catch خواهیم داشت که وظیفه پیاده سازی ارتباط بین سوکت کلاینت و سرور را دارد و البته به همراه منتشر کردن یک eventخاص.


برنامه نویسی طراحی