একটি Node.js "সার্ভার" Nginx বা অ্যাপাচি সার্ভারের সাথে কীভাবে তুলনা করে?


90

আমি সম্প্রতি নোড.জেএস অধ্যয়ন করছি এবং সাধারণ নোড.জেএস ভিত্তিক সার্ভার লেখার জন্য কিছু উপাদান পেয়েছি। উদাহরণস্বরূপ, নিম্নলিখিত

var express = require("express"),
http = require("http"), app;

// Create our Express-powered HTTP server
// and have it listen on port 3000
app = express();
http.createServer(app).listen(3000);

// set up our routes
app.get("/hello", function (req, res) {
    res.send("Hello World!");
});

app.get("/goodbye", function (req, res) {
    res.send("Goodbye World!");
});

এখন, যদিও আমি কোডটিতে কী ঘটছে বুঝতে পেরেছি, আমি পরিভাষাটি দিয়ে কিছুটা বিভ্রান্ত হয়ে পড়েছি। আমি যখন সার্ভার শব্দটি শুনি, তখন আমি অ্যাপাচি বা এনগিনেক্সের মতো জিনিসগুলি নিয়ে ভাবি। আমি তাদের সম্পর্কে আমার ধারার অ্যাপ্লিকেশন ধরে রাখতে পারে এমন ধারক হিসাবে ভেবে অভ্যস্ত। Ngin.js সার্ভারটি Nginx / অ্যাপাচি সার্ভার থেকে কীভাবে আলাদা? এটি কি সত্য নয় যে কোনও নোড.জেএস ভিত্তিক সার্ভার (ie কোড) চালানোর জন্য এখনও এনগিনেক্সের মতো কিছু স্থাপন করা যেতে পারে? তাহলে উভয়কেই "সার্ভার" বলা হয় কেন?


4
Isn't it true that a Node.js based server (i.e. code) will still be placed within something like Nginx to run?না, ভুল
Jaromanda এক্স

4
প্রযুক্তিগতভাবে আপনি নিজের অ্যাপটি চালাতে পারেন এবং ক্লায়েন্টকে কার্যকরভাবে ওয়েব সার্ভারের ভূমিকাটি পূরণ করতে নোড সরবরাহ করতে পারেন তবে আপনি সম্ভবত চিবানোর চেয়ে আরও বেশি কামড় দিচ্ছেন। আমি সম্প্রতি এই মহান নিবন্ধটি পড়েছি: nginx.com/blog/nginx-vs-apache-our- ভিউ
ডেটাফঙ্ক

4
আমি স্পষ্ট করে বলি যে আমি যখন দুজনের মধ্যে পার্থক্য জানতে চেয়েছিলাম তখন আমি অ্যাপাচি বনাম এনগিনেক্স নিয়ে যাইনি। আমি নোড.জেএস বনাম এনগিনেক্স নিয়েছিলাম।
কৃতজ্ঞ

4
শিরোনাম আপনাকে বিভ্রান্ত করতে দেবেন না। আপনি যদি নিবন্ধটি পড়েন তবে আপনি বুঝতে পারবেন কেন আমি বলেছিলাম যে আপনি
নিজেরাই

উত্তর:


133

হ্যাঁ, এটি একটি সার্ভার।

একটি নোড.জেএস ওয়েব অ্যাপ্লিকেশন হ'ল এনগিনেক্স বা অ্যাপাচি-এর মতো একটি পূর্ণাঙ্গ ওয়েব সার্ভার।

আপনি অন্য কোনও ওয়েব সার্ভার ব্যবহার না করেই আপনার নোড.জেএস অ্যাপ্লিকেশনটি পরিবেশন করতে পারেন। আপনার কোডটি কেবল এতে পরিবর্তন করুন:

app = express();
http.createServer(app).listen(80); // serve HTTP directly

আসলে, কিছু প্রকল্প অন্যান্য সার্ভারের (অ্যাপাচি সহ) জন্য ফ্রন্ট-এন্ড লোড ব্যালেন্সার হিসাবে নোড.জেস ব্যবহার করে।

মনে রাখবেন যে নোড.জেএস এটি করার জন্য একমাত্র উন্নয়ন স্ট্যাক নয়। গো, জাভা এবং সুইফটে ওয়েব ডেভলপমেন্ট ফ্রেমওয়ার্কগুলিও এটি করে।

কেন?

শুরুতে ছিল সিজিআই। সিজিআই ভাল ছিল এবং ঠিক আছে। অ্যাপাচি একটি অনুরোধ পাবেন, ইউআরএলকে একটি সিজিআই অ্যাপ্লিকেশন চালানো দরকার, সেই সিজিআই অ্যাপ্লিকেশনটি কার্যকর করতে হবে এবং পরিবেশের ভেরিয়েবল হিসাবে ডেটা পাস করতে হবে, স্টাডাউট পড়বে এবং ডেটাটি ব্রাউজারে ফিরিয়ে দিতে হবে।

সমস্যাটি হ'ল এটি ধীর। এটি ঠিক আছে যখন সিজিআই অ্যাপ্লিকেশনটি একটি ছোট স্ট্যাটিক্যালি সংকলিত সি প্রোগ্রাম ছিল তবে ছোট স্ট্যাটিক্যালি সংকলিত সি প্রোগ্রামগুলির একটি গ্রুপ বজায় রাখা কঠিন হয়ে পড়ে। তাই লোকেরা স্ক্রিপ্টিং ভাষায় লেখা শুরু করে। তারপরে এটি বজায় রাখা শক্ত হয়ে যায় এবং লোকেরা অবজেক্ট অরিয়েন্টেড এমভিসি ফ্রেমওয়ার্কগুলি বিকাশ করতে শুরু করে। এখন আমাদের সমস্যা হতে শুরু করে - প্রতিটি অনুরোধে অবশ্যই এই সমস্ত শ্রেণিগুলি সঙ্কলন করতে হবে এবং কেবলমাত্র এইচটিএমএল পরিবেশন করার জন্য এই সমস্ত অবজেক্ট তৈরি করতে হবে, এমনকি পরিবেশন করার জন্য গতিশীল কিছুই নেই (কারণ ফ্রেমওয়ার্কটি পরিবেশন করার জন্য গতিশীল কিছুই নেই)।

আমাদের যদি প্রতিটি অনুরোধে এই সমস্ত বস্তু তৈরি করার প্রয়োজন না হয় তবে কী হবে?

এটাই লোকেরা ভেবেছিল। এবং সেই সমস্যাটি সমাধান করার চেষ্টা থেকে শুরু করে বেশ কয়েকটি কৌশল এসেছে। প্রাচীনতমগুলির মধ্যে একটি হ'ল mod_phpঅ্যাপাচি-র মতো ওয়েব সার্ভারগুলিতে সরাসরি দোভাষীদের এম্বেড করা । সংকলিত ক্লাস এবং অবজেক্টগুলিকে গ্লোবাল ভেরিয়েবলে সংরক্ষণ করা যায় এবং তাই ক্যাশে করা যায়। আর একটি কৌশল ছিল প্রাক সংকলন করা। এবং অন্য কৌশলটি ছিল একটি নিয়মিত সার্ভার প্রক্রিয়া হিসাবে অ্যাপ্লিকেশনটি চালানো এবং ফাস্টসিজিআইয়ের মতো কাস্টম প্রোটোকল ব্যবহার করে ওয়েব সার্ভারের সাথে কথা বলা।

তারপরে কিছু বিকাশকারীরা তাদের অ্যাপ-> সার্ভার প্রোটোকল হিসাবে কেবল HTTP ব্যবহার শুরু করে started কার্যত, অ্যাপ্লিকেশনটি একটি এইচটিটিপি সার্ভারও। এর সুবিধাটি হ'ল আপনার কোনও নতুন, সম্ভবত বগি, সম্ভবত পরীক্ষিত প্রোটোকল প্রয়োগ করার দরকার নেই এবং আপনি সরাসরি কোনও ওয়েব ব্রাউজার (বা সাধারণভাবে curl) ব্যবহার করে আপনার অ্যাপটি ডিবাগ করতে পারেন । এবং আপনার অ্যাপ্লিকেশনটিকে সমর্থন করার জন্য আপনার কোনও পরিবর্তিত ওয়েব সার্ভারের দরকার নেই, কেবল এমন কোনও ওয়েব সার্ভার যা বিপরীত প্রক্সি বা পুনঃনির্দেশগুলি করতে পারে।

কেন অ্যাপাচি / এনগিনেক্স ব্যবহার করবেন?

আপনি যখন কোনও নোড.জেএস অ্যাপ্লিকেশন পরিবেশন করেন তখন নোট করুন যে আপনি নিজের ওয়েব সার্ভারের লেখক। আপনার অ্যাপ্লিকেশনটিতে যে কোনও সম্ভাব্য বাগটি হ'ল ইন্টারনেটে সরাসরি ব্যবহারযোগ্য বাগ। কিছু লোক এটিকে (ন্যায়সঙ্গতভাবে) স্বাচ্ছন্দ্য দেয় না।

আপনার নোড.জেএস অ্যাপ্লিকেশনের সামনে অ্যাপাচি বা এনগিনেক্সের একটি স্তর যুক্ত করার অর্থ আপনার অ্যাপ্লিকেশনটির ইন্টারফেস হিসাবে লাইভ ইন্টারনেটে একটি যুদ্ধ-পরীক্ষিত, সুরক্ষামূলকভাবে শক্ত সফ্টওয়্যার রয়েছে। এটি একটি ক্ষুদ্র বিড়ম্বন যুক্ত করে (বিপরীত প্রক্সিং) তবে বেশিরভাগই এটির পক্ষে মূল্যবান বলে মনে করে।

এটি নোড.জেএস এর প্রথম দিনগুলিতে স্ট্যান্ডার্ড পরামর্শ হিসাবে ব্যবহৃত হত তবে এই দিনগুলিতে এমন সাইট এবং ওয়েব পরিষেবাদি রয়েছে যা সরাসরি নোড.জেগুলি ইন্টারনেটে প্রকাশ করে। http.Serverমডিউল এখন মোটামুটি ভাল যুদ্ধের পরীক্ষিত ইন্টারনেটে বিশ্বাস করা হয়।


4
আমি অনুরূপ এসও থ্রেডে পড়েছি যে নোডের সামনে একটি এনগিনেক্স বা অ্যাপাচি স্তর রাখলে "এর অবরুদ্ধকরণের প্রকৃতি সরিয়ে নিয়ে যায়"। এই সম্পর্কে কোন চিন্তা?
MrfksIV

4
@ শ্রীফক্সআইভি এনগিনেক্স এবং অ্যাপাচি 2 উভয়ই অবরুদ্ধ। প্রকৃতপক্ষে তারা নোড.জেএস এর অস্তিত্বের অনেক আগে নন-ব্লকিং বাস্তবায়ন করেছিল। অ্যাপাচি 1 ব্যবহার করবেন না
slebetman

14

নোডজেস নিজস্ব সার্ভার তৈরি করে। আপনি দেখতে পাচ্ছেন, পরিভাষাটি বেশ স্পষ্ট:

http.createServer(app).listen(3000);

একটি সার্ভার তৈরি করুন এবং 3000 পোর্টে HTTP অনুরোধ শুনুন।

আমরা আমাদের প্রকল্পের একটিতে nginx ব্যবহার করেছি, তবে এটি একাধিক নোডেজ উদাহরণগুলির জন্য লোডবালেন্সারের মতো ছিল।

বলুন আপনার 3000 এবং 3001 পোর্টে দুটি নোডেজ উদাহরণ রয়েছে, এখন আপনি nginxআপনার আসল httpকলগুলি শুনতে একটি সার্ভার হিসাবে ব্যবহার port 80করতে পারেন এবং আপনার অনুরোধটি nodejsসার্ভারে বা অন্য কোনও সার্ভারে পুনর্নির্দেশ করতে চাইতে পারে , আরও একটির মতো loadbalancer। সুতরাং আপনি এখনও যা nginxসরবরাহ করেন তা ব্যবহার করতে পারেন nodejs

ইতিমধ্যে এখানে একটি ভাল প্রশ্ন জিজ্ঞাসা করা হয়েছে


4
আমি আসলে নিজেও এনজিনেক্সের প্রতি খুব বেশি মনোযোগী নই। আমি নোড.জেএস "সার্ভার" এবং অ্যাপাচি বা এনগিনেক্সের মতো অন্যান্য "সার্ভার" এর মধ্যে পার্থক্য সম্পর্কে ভাবছিলাম। আমি বুঝতে পারি না যে কীভাবে অন্তর্ভুক্ত (যেমন নোড কোড )টিকে ধারক (যেমন অ্যাপাচি) এর সাথে সমান করা যায় ... তবে আমার ধারণা এই বোঝাটি ভুল ছিল। এখন, আমি বুঝতে পেরেছি যে নোড.জেএস কোড 3000 পোর্ট শোনে ঠিক যেমন অ্যাপাচি 80 পোর্ট শোনে .... তাই আমি অনুমান করি যে তারা একই রকম। সুতরাং এটি কি সত্য যে তারা উভয়ই তাদের নিজস্ব শক্তি এবং দুর্বলতা রয়েছে এমন সার্ভার?
কৃতজ্ঞ

4
createServer সবেমাত্র একটি শ্রবণ পোর্ট তৈরি করে। এটি কিছুই পরিবেশন করে না।
রজার এফ। গে গে

4
নোডেজগুলি যদি কোনও বন্দরের অনুরোধের ভিত্তিতে কিছু পরিবেশন করে না যায় তবে কোনও বন্দরে শোনার জন্য ক্রিয়েট সার্ভার ব্যবহার করার কী দরকার? ... সুতরাং, লজিকাল এক্সটেনশনের মাধ্যমে এটি "সার্ভার" দ্বারা একরকম বা অন্য উপায়, না?
জিজি 2

@ রজারএফ.গেই ... এটি একটি নির্দিষ্ট পোর্টে একটি শ্রোতা তৈরি করে এবং অযোগ্য অনুরোধে একটি কলব্যাক ফাংশন সম্পাদন করে। আমি যা বলব তা এটি একটি সার্ভার তৈরি করে।
শাইখ

4
@ নাeম শাইখ @ এটি কোনও কাজ করে না। এমন কিছু কল করা যা সার্ভারের কোনও কিছুর পরিবেশন করে না, তা বোঝা যায় না।
রজার এফ। গে

1

ধরুন অ্যাপাচি হোটেল নামে একটি হোটেল আছে যার প্রতিটি গ্রাহকের জন্য ওয়েটার রয়েছে।

গ্রাহক সালাদ অর্ডার করার সাথে সাথে ওয়েটার শেফের কাছে গিয়ে তাকে জানায়। শেফ খাবার প্রস্তুত করার সময় ওয়েটার অপেক্ষা করে। এখানে,

Chef => File System,

Waiter => Thread,

Customer => Event.

এমনকি যখন গ্রাহক জল অর্ডার করে তখন ওয়েটার কেবল সালাদ পরিবেশন করার পরে নিয়ে আসে। শেফ দ্বারা সালাদ প্রস্তুত না হওয়া পর্যন্ত ওয়েটার অপেক্ষা করতে থাকে। এই রাষ্ট্রটিকে অবরুদ্ধ রাষ্ট্র হিসাবে চিহ্নিত করা হয়। এমনকি হোটেল বাড়লে প্রতিটি গ্রাহকের পরিবেশন করার জন্য আলাদা ওয়েটার থাকা উচিত। এটি থ্রেড (ওয়েটার) অবরুদ্ধকরণ বৃদ্ধি করে।

এখন, নোড হোটেলে এসে সমস্ত গ্রাহকের জন্য কেবল একটি ওয়েটার রয়েছে। যদি প্রথম গ্রাহক স্যুপ অর্ডার করে ওয়েটার শেফকে বলে এবং দ্বিতীয় গ্রাহকের কাছে যায়। খাবার প্রস্তুত হওয়ার পরে ওয়েটার গ্রাহকের হাতে পৌঁছে দেয়। এখানে গ্রাহক অপেক্ষা করবেন না। এই রাজ্যটিকে অ-ব্লকিং রাষ্ট্র হিসাবে উল্লেখ করা হয়। একক ওয়েটার (থ্রেড) সমস্ত গ্রাহককে সার্ভার করে এবং তাদের খুশি করে।

সুতরাং, নোড যা একক থ্রেডেড অ্যাপ্লিকেশন তা খুব দ্রুত।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.