آشنایی با NodeJS و نحوه نصب آن بروی ویژوال استادیو
یکشنبه 24 مرداد 1395در این مقاله مطالبی در مورد NodeJS و تکنولوژی های مربوط به آن نظیر Real Time Comunication و scalability و ... را ارائه خواهیم داد و در آخر طریقه نصب NodeJS و برنامه های مورد نیاز آن را مورد بررسی قرار خواهیم داد و نگاه کوتاهی به چگونگی استفاده از Nodejs خواهیم داشت .
NodeJS یک رسانه open source , real time , cross platform , server side language است که با JavaScript بروی Google's v8 Javascript engine نوشته شده است . NodeJS همچنین ، دارای یک معماری رویداد محور (event-driven) برای I/O های مختلف الزمان است ، که توان و مقیاس پذیری نرم افزار ما را بهبود می بخشد .
برای داشتن درکی بهتر از NodeJS ، معنی جمله بالا را به شما نشان خواهیم داد .
در صورتی که به یادگیری اصولی و حرفه ای این تکنولوژی قدرتمند علاقمند هستید میتوانید دوره کامل و جامع آموزش Node Js موجود در سایت تاپ لرن را مشاهده کنید .
• ارتباط بلادرنگ (Real-Time Communication
Real-Time Web Solution یک تکنولوژی تحت وب می باشد ، که این امکان را به کاربر می دهد که بدون داشتن تاخیری ، به اطلاعاتی که توسط نویسندگانش منتشر شده ، دسترسی داشته باشد ، بدون نیاز به اینکه کاربر صفحه را Refresh کند .
•Cross Platform
Cross Platform بدین معناست که ، NodeJS مستقل از وابستگی به هرگونه Platform خاصی است ، یعنی این قابلیت را دارد که بر روی هر ماشینی با هر سیستم عاملی مثل Windows , Linux , Macintoch نصب و استفاده شود . NodeJS نیاز به پیش نیازات خاصی ندارد و Portable است .
•برنامه سمت سرور (Server Side Application)
وضعیت هایی وجود دارد که ممکن نیست همه مسئولیت های برنامه را به کاربر سپرد ، در حقیقت کاربر توانایی انجام و پذیرفتن آن ها را ندارد . برای مثال ، اگر ما قصد ذخیره اطلاعات در پایگاه داده را داریم یا قصد انجام عملیات خاصی را در برنامه داریم . ما باید نظیر همچین کارهایی را در سمت سرور قرار دهیم که با این کار ما میتوانیم کاربر را به هدف و خواسته اش برسانیم .
•معماری رویداد محور (Event Driven Architecture)
اگر ما با یکسری سیستم های مدیریت داده کار می کنیم که دارای تعداد زیادی node با وضعیت های متفاوت است ، رویداد-محور این توانایی را به ما میدهد که هر وضعیتی را به سرعت پیدا کنیم ، به همین دلیل سرعت پاسخ ما بالا میرود . برای مثال برنامه را در بگیرید که ، خانه هایی را برای فروش یا اجاره قرار داده است و مشتریان قصد آگاه شدن از خانه هایی که هنوز موجود است و به فروش نرفته است را دارند . این توانایی را باید داشته باشیم ، زمانی که یک خانه انتخاب ، و به فروش رسید ، وضعیت آن در برنامه سریعا باید تغییر کند .
•ورودی و خروجی های مختلف الزمان - غیر همزمان - (Asynchronous I/O)
در اینجا دو رویکرد در مورد I/O وجود دارد ، راه ساده که وجود دارد "همزمان" (synchronous) است ، که تمام منابع و عملیات ها را تا زمان کامل شدن ارتباط مسدود می کند ، که این امر در صورت زیاد بودن ورودی و خروجی های برنامه ، باعث تاخیر و هدر رفتن منابع میشود .
راه دیگری که وجود دارد "غیر همزمان" (Asynchronous) است که این قابلیت را به عملیات های مهم می دهد که ، زمانی که منتظر گرفتن I/O هستند ، کار خود را انجام دهند .
•ظرفیت پذیرش (Throughput)
در این نوع از برنامه ها که ما پیامی را دریافت و ارسال میکنیم ، این امکان وجود دارد که پیامی به درستی به ایستگاه پایانی نرسد ، بنابراین ، به درصد پیام هایی که به درستی از یک کانال دریافت شده اند ، ظرفیت پذیرش (Throughput) می گویند .
•مقیاس پذیری (Scalability)
مقیاس پذیری یکی از توانایی های برنامه است که میتواند در برخورد با سناریو های بزرگ مانند حجم عظیمی از داده ها یا nodeها ، رشد کند . به همین دلیل ، بالا رفتن تعداد در کیفیت تاثیری نخواهد داشت .
•پروتکل های ارتباطی (Communication Protocols)
1.WebSocket
WebSocket یک پروتکل تمام duplexes است و ذاتا از http استفاده میکند و این اجازه را به رشته
پیام ها میدهد که در بالای TCP درجریان باشند . این از : Google Chrome (> 16) Fire Fox (> 11) IE (> 10) Win IIS (>8.0) پشتیبانی میکند . با توجه به پیام رمزگذاری شده و تمام دوبلکس ، websocket بهترین راه حل است و در ابتدا SignalR هم web server و هم Client server را برای آگاهی از این که WebSocket را پشتیبانی میکنند یا نه ، چک میکند .
ارتباط پیچیده (Simplex Communication)
در این روش ، فقط در یک راه گسترش میشود ، بدین معنا که در یک نقطه فقط پخش میشود درحالی که در نقطه دیگر بدون ارسال هیچگونه پیامی فقط گوش میدهد و دریافت میکند ، همانند رادیو و تلویزیون .
نیمه دوبلکس (Half duplex)
در این روش یک نقطه پیامی را ارسال میکند و در این لحظه نقطه دیگر نمی تواند پیامی را ارسال کند و باید منتظر بماند تا ارسال نقطه اول به پایان برسد سپس توانایی ارسال پیام را خواهد داشت ، در واقع در یک لحظه فقط یک ارتباط یک طرفه وجود دارد ، همانند دستگاه های بیسیم قدیمی و پروتکل HTTP .
تمام دوبلکس (Full duplex)
هر دو نقطه این توانایی را دارند که با هم پیام ارسال و دریافت کنند ، و نیازی نیست که طرف مقابل صبر کند تا عملیات نقطه مقابل به اتمام برسد . همانند تلفن و پروتکل websocket .
2. (Server Sent Event (SSE
گزینه بعدی برای SignalR ، به دلیل ارتباط مداوم بین سرور و کابر ، یک SSE است . در این روش ، ارتباط قطع نمی شود و آخرین داده های سرور بطور اتوماتیک بروزرسانی و از طریق پروتکل HTTP به کاربر منتقل میشوند .
Hide Copy Code
var evsrc = new EventSource("url"); // Load and Register Event Handler for Messages in this section evsrc.addEventListener("message", function (event) { //processing data in this section });
3. Forever Frame
زمانی که کاربر یک درخواست برای سرور ارسال میکند ، سرور یک iFrame مخفی در قامت یک Block هایی برای کاربر ارسال میکند ، که این iFrame مسئولیت نگه داشتن ارتباط بین سرور و کاربر را برای همیشه بر عهده دارد . زمانی که سرور ، داده ها را تغییر می دهد ، سپس داده ها را به عنوان یک
(Script Tag (Hidden iFrame برای کاربر ارسال میکند و این script ها بصورت ترتیبی دریافت خواهند شد .
4.Polling
کاربر درخواستی را برای سرور ارسال میکند و سرور آن را فورا پاسخ می دهد اما بعد از آن ، ارتباط با سرور قطع میشود ، به همین دلیل برای برقراری ارتباطی دوباره بین سرور و کاربر باید منتظر درخواست دوباره کاربر باشیم . برای حل این مشکل ، باید بصورت دستی وقفه (Timeout) تنظیم کنیم ، برای مثال ، هر 10 ثانیه یکبار کاربر درخواستی را برای سرور ارسال میکند تا موجود بودن اطلاعات جدید را چک کند و آخرین بروزرسانی ها را دریافت کند . Polling از منابع ما استفاده میکند و روشِ اقتصادی و مقرون به صرفه ای نیست .
5.Long Polling
کاربر درخواستی رابرای سرور ارسال میکند و سرور آن را فورا پاسخ میدهد و ارتباط آنها برای مدت زمان مشخصی باقی می ماند و در این مدت زمان مشخص ، کاربر نمیتواند بصورت صریح (explicit) برای سرور درخواستی را ارسال کند . این درحالیست که در روش Polling ، کاربر مجبور بود که در بازه timeout درخواست هایی را بصورت صریح ارسال کند . برنامه نویسی مفهومی این جنبه را پوشش می دهد .
6.Socket.io
Socket.io یک ارتباط رویداد-محور (event driven) و بلادرنگ (Real Time) است ، که از پنج تکنولوژی بالا مجزا است ، و این اجازه را به برنامه میدهد که بدون هیچ گونه نگرانی داده ارسال و دریافت کند .
چگونگی کد NodeJS با کمک Microsoft .Net
1. visual studio 2015 را نصب کرده و آن را از اینجا بروزرسانی کنید .
2. NodeJS را از اینجا نصب کنید .
3. ابزارهای NodeJS برای Visual Studio را از اینجا دانلود کنید .
4. با استفاده از npm میتوانید socket.io را نصب کنید .
5. کدهای لازم در سمت سرور را بنویسید .
6. کدهای لازم در بخش کاربر را بنویسید .
7. برنامه را تست کنید .
• نصب NodeJS
1. به سایت https://nodejs.org/en/ مراجعه کنید .
2. اگر از Windows استفاده میکنید ، "v4.4.7 LTS Recommended For Most Users" را انتخاب کنید .
3. بعد از اتمام دانلود ، فایل دانلود شده را اجرا کنید .
4. next را بزنید .
5. در این مرحله ویزگی های مختلفی وجود دارد که میتوانید آنها را تغییر دهید یا بدون تغییر Next را بزنید .
• نصب NodeJS Tools برای Visual Studio
1. قبل از نصب NTVS ، به "Visual Studio" and "Create New Project" -> "Templates" -> "JavaScript" بروید ، خواهید دید که هیچ NodeJS وجود ندارد .
2. به سایت https://nodejstools.codeplex.com/releases/view/614706 بروید .
3. بعد از اتمام دانلود ، فایل را اجرا کنید .
4. برنامه را نصب کنید .
5. به اینجا بروید Visual Studio -> Create Project -> Templates -> JavaScript -> Node.js .
6. شما npm را خواهید داشت (NodeJS Package Manager) ، که به کمک آن شما میتوانید کتابخانه های مورد نیاز را نصب کنید .
• نصب Socket.io
روی npm راست کلیک کرده و "Install New npm Packages" را انتخاب کنید .
چگونه از کدها استفاده کنیم .
کدهای زیر را Server.Js بنویسید .
var http = require("http"); var url = require('url'); var fs = require('fs'); var io = require('socket.io'); var port = process.env.port || 1337; var server = http.createServer(function(request, response) { var path = url.parse(request.url).pathname; switch (path) { case '/': response.writeHead(200, { 'Content-Type': 'text/html' }); response.write('hello world'); response.end(); break; case '/Index.html': fs.readFile(__dirname + path, function(error, data) { if (error) { response.writeHead(404); response.write("page doesn't exist - 404"); response.end(); } else { response.writeHead(200, { "Content-Type": "text/html" }); response.write(data, "utf8"); response.end(); } }); break; default: response.writeHead(404); response.write("page this doesn't exist - 404"); response.end(); break; } }); server.listen(port);   var listener = io.listen(server); listener.sockets.on('connection', function(socket) { //Send Data From Server To Client socket.emit('message', { 'message': 'Hello this message is from Server' }); //Receive Data From Client socket.on('client_data', function(data) { socket.emit('message', { 'message': data.letter }); socket.broadcast.emit('message', { 'message': data.letter }); process.stdout.write(data.letter); console.log(data.letter); }); });
کدهای زیر را در Index.html بنویسید .
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> <script src="/socket.io/socket.io.js"></script> <script src="https://cdn.socket.io/socket.io-1.4.5.js"></script> <script src="http://localhost:8080/server.js"></script> <script src="/server.js"></script> <script> var socket = io.connect(); socket.on('message', function (data) { $('#conversation').append('</br>' + data.message); });   $(document).ready(function () { $('#send').click(function () { var msg = $('#text').val(); socket.emit('client_data', { 'letter': msg }); }) }); </script> <input id="text" /> <button id="send">send</button> <div id="conversation">This is our conversation</div>
نحوه استفاده از nodejs با net.
1. F5 را بزنید ، تمام web application ها در .net اجرا خواهد شد و شما نتیجه زیر را خواهید دید
2. مرورگر را باز کرده و به آدرس /index.htm را به آن اضافه کنید
- NodeJs
- 7k بازدید
- 3 تشکر