# زبان های اسکریپتی > JavaScript و Framework های مبتنی بر آن > Node.js >  Socket,io چی هست؟

## ABZiko

سلام، یک سوال داشتم، این Socket.io چی هست که اینقدر ازش تعریف می کنن؟

----------


## amin1softco

Socket.IO یک کتابخانه جاوا اسکریپت برای وب اپیلیکیشن ها است که یک ارتباط بلادرنگ و دوجهته بین کلاینت و سرور برقرار می کند و دارای دو قسمت یکی کتابخانه سمت کلاینت که در مرورگر اجرا می شه و یک کتابخانه سمت سرور بر پایه node.js است که دارای یک API برای ارتباط با یکدیگر هستند . 
Socket.IO در اصل یک رابط برای پروتکل  WebSocket است نه یک کتابخانه برای آن در اصل یک پرتوکل انتقال سفارشی شده روی پروتکل های بلادرنگ دیگر است  که یکسری قابلیت های بیشتر از قبیل ارسال پخشی به چندین سوکت , ذخیره داده ها ی هر کلاینت و ارتباط نامتقارن را فراهم کرده است . 
برگرفته از ویکی پدیا

----------


## cybercoder

socket.io کتابخانه ای هستش که باهاش میتونید negotiation رو به صورت لایو برقرار کنید. مثلا فیسبوک رو دیدید که بدون اینکه رفرش کنید براتون پیام میاد یا داخل توییتر توییت جدید زده میشه بدون اینکه شما رفرش کنید به صفحتون اضافه میشه.
Socket.io معمولا به همراه nodejs استفاده میشه که هم سمت سرور کار می کنه هم سمت کلاینت. امروزه تقریبا 99 درصد بازی های آنلاین از Socket.io استفاده می کنند مثل بازی شطرنج آنلاین که حریف حرکت می کنه برای شما حرکتش میاد و ...

Socket.io در کنار nodejs و flux جعبه ابزاری بسیار قدرتمند و آسان محسوب میشود.

موفق باشید.

----------


## arenaw

ما میخوایم وقتی کاربر Y وارد سیستم شد، کاربر X خبر دار بشه.

تو حالت عادی:
- وقتی کاربر Y وارد شد، به سرور خبر میده که من اومدم!
- کاربر X هر چند ثانیه از سرور میپرسه که کاربر Y اومده یا نه؟
- اگه کاربر Y وارد شده بود، سرور بهش جواب مثبت میده.

این روش بدیش اینه که هم به سرور فشار میاد که هر چند ثانیه بخواد بیاد چک کنه ببینه چی شده چی نشده، هم به خود کاربر X که بدبخت باید هی از سرور بپرسه 
ولی خوبیش اینه که امکانات زیادی نمیخواد و هزینه کمتری داره

ولی با socket.io این کار اینطوری انجام میشه:

- وقتی کاربر Y وارد شد، به سرور خبر میده که من اومدم!
- سرور وقتی فهمید که کاربر Y اومده، به کاربر X خبر میده!

توی این روش، کاربر X فقط منتظر میشینه تا سرور بهش خبر بده و هیچ کاری انجام نمیده. سرور هم فقط منتظره تا یه اتفاقی بی افته و عکس‌العمل انجام بده.

----------


## khadem1386

> خوبیش اینه که امکانات زیادی نمیخواد و هزینه کمتری داره


می شه توضیح بدید که روش socket.io چه امکاناتی  می خواد و چه هزینه هایی داره؟

----------


## arenaw

> می شه توضیح بدید که روش socket.io چه امکاناتی  می خواد و چه هزینه هایی داره؟


اگه سرور اختصاصی داشته باشیم خودمون که خب هزینه ای نداره. ترمینال رو باز میکنیم، نودجی‌اس رو دانلود و نصب میکنیم و بعدش ماژول سوکت‌آی‌او رو فعال میکنیم. اما داشتن سرور اختصاصی، پول و رسیدگی و نگهداری و پشتیبانی و ... لازم داره.
اما یه جاهایی هستن که هاست میفروشن. به این صورت که اون سرور فیزیکی رو خودشون نگهداری میکنن و کار پشتیبانیش رو انجام میدن، و در قبال پولی که از شما میگیرن، یه فضایی رو از روی اون سرور در اختیار شما قرار میدن.
اینها بر اساس حجمی که به شما اختصاص میدن و امکاناتی که در اختیارتون قرار میدن، پول میگیرن، با این حال اون سرور هنوز برای اونهاست.
مشخصه که توی یه هاستی که از اونجا خریدید، شما دسترسی به ترمینال ندارید که هر کاری دلتون خواست بکنید. در عوض میتونید با پرداخت هزینه‌اش، از مدیر اون سرور بخواید  که اون کار رو واستون انجام بده.

----------


## khadem1386

آیا Node روی سرور ویندوز و لینوکس هر دو قابل اجرا هست؟
اگر بله ترمینال داخل ویندوز چطوری صدا زنده می شه. آیا منظور از ترمینال همان صفحه مشکی رنگی است که به شکل DOS هست و با اجرای node.exe باز می شه؟

مرسی

----------


## arenaw

> آیا Node روی سرور ویندوز و لینوکس هر دو قابل اجرا هست؟


بله.




> اگر بله ترمینال داخل ویندوز چطوری صدا زنده می شه.


منوی استارت رو بزنید و تایپ کنید cmd و اینتر رو بزنید. شما الان کامندلاین رو اجرا کردین.
حالا درصورتی که نودجی‌اس روی سیستمتون نصب باشه و اسکریپتی که نوشتید توی درایو C و با نام index.js باشه، میتونید با دستور زیر اون رو اجرا کنید.

node C:\index.js





> آیا منظور از ترمینال همان صفحه مشکی رنگی است که به شکل DOS هست و با اجرای node.exe باز می شه؟


ترمینال (در لینوکس) یا کامند لاین (در ویندوز) یه کار مشابهی رو انجام میدن. اما اون node.exe که میگید، در واقع همون کامندلاین ویندوز هستش که واسه اجرای دستورات نودجی‌اس بهینه شده.

----------


## cybercoder

nodejs + express js + bower + ejs + gulp + socket.io
من از این ها استفاده می کنم، شما هم می توانید به راحتی از قدرت اکسپرس و سادگی ejs بهره بگیرید، کافیست که مفهوم رو درک کنید اونوقت استفاده بسیار آسان هست در غیر این صورت خیر.

موفق باشید.

----------


## adelavr

> - وقتی کاربر Y وارد شد، به سرور خبر میده که من اومدم!
> -* سرور وقتی فهمید که کاربر Y اومده، به کاربر X خبر میده!*
> 
> توی این روش، کا*ربر X فقط منتظر میشینه تا سرور بهش خبر بده و هیچ کاری انجام نمیده.* سرور هم فقط منتظره تا یه اتفاقی بی افته و عکس‌العمل انجام بده.


من تعریف Node.js رو زیاد شنیدم و اینکه فیسبوک ازش استفاده میکنه و توی Chess.com هم دیدم که با سرعت بالا حرکت های هر کلاینت دریافت میشه که بعید میدونم با Jquery بشه با اون سرعت انتقال داد اما سوالم اینه که مگه نمیگیم همیشه درخواست از سمت کلاینت هست پس تو این حالتی که شما میگید عملا سرور چطور دیتای خودشو به کاربر X تحویل میده وقتی کاربر X کلاینت هست و هیچ درخواستی رو از سرور نکرده ؟؟

----------


## negative60

> من تعریف Node.js رو زیاد شنیدم و اینکه فیسبوک ازش استفاده میکنه و توی Chess.com هم دیدم که با سرعت بالا حرکت های هر کلاینت دریافت میشه که بعید میدونم با Jquery بشه با اون سرعت انتقال داد اما سوالم اینه که مگه نمیگیم همیشه درخواست از سمت کلاینت هست پس تو این حالتی که شما میگید عملا سرور چطور دیتای خودشو به کاربر X تحویل میده وقتی کاربر X کلاینت هست و هیچ درخواستی رو از سرور نکرده ؟؟


تو حالت عادی تو پروتکل HTTP ارتباط به این شکل هست:
کلاینت به سرور متصل می‌شه درخواست رو ارسال می‌کنه سرور جواب میده بعد اتصال بسته می‌شه.


تو  Node.js به این شکل هست:
کلاینت  به سرور متصل می‌شه درخواست ارسال می‌شه و سرور جواب میده اما ارتباط بسته  نمی‌شه و تا زمانی‌ که ارتباط از طرف کلاینت یا سرور بسته نشه ارتباطشون حفظ  می‌شه  هم کلاینت و هم سرور می‌تونن تعداد بی‌ نهیات درخواست و پاسخ رو به  هم ارسال کنند

----------

