Transform binary representation into integral number using bitset

 /* The following code example is taken from the book
  * "The C++ Standard Library - A Tutorial and Reference"
  * by Nicolai M. Josuttis, Addison-Wesley, 1999
  *
  * (C) Copyright Nicolai M. Josuttis 1999.
  * Permission to copy, use, modify, sell and distribute this software
  * is granted provided this copyright notice appears in all copies.
  * This software is provided "as is" without express or implied
  * warranty, and with no claim as to its suitability for any purpose.
  */
 #include <bitset>
 #include <iostream>
 #include <string>
 #include <limits>
 using namespace std;
 
 int main()
 {
     /* print some numbers in binary representation
      */
     cout << "267 as binary short:     "
          << bitset<numeric_limits<unsigned short>::digits>(267)
          << endl;
 
     cout << "267 as binary long:      "
          << bitset<numeric_limits<unsigned long>::digits>(267)
          << endl;
 
     cout << "10,000,000 with 24 bits: "
          << bitset<24>(1e7) << endl;
 
     /* transform binary representation into integral number
      */
     cout << "\"1000101011\" as number:  "
          << bitset<100>(string("1000101011")).to_ulong() << endl;
 }
 
  /* 
 267 as binary short:     0000000100001011
 267 as binary long:      00000000000000000000000100001011
 10,000,000 with 24 bits: 100110001001011010000000
 1000101011" as number:  555
 
  */       
    // create a bitset that is 8 bits long bitset<8> bs; // display that bitset for( int i = (int) bs.size()-1; i >= 0; i-- ) { cout << bs[i] << " "; } cout << endl; // create a bitset out of a number bitset<8> bs2( (long) 131 ); // display that bitset, too for( int i = (int) bs2.size()-1; i >= 0; i-- ) { cout << bs2[i] << " "; } cout << endl;

Comparisons among Dot Net Based CMS solutions

Comparisons among Dot Net Based CMS solutions

Brief Overview on Kentico CMS

Brief Overview on Kentico CMS

Kentico Hosted Trial Kentico Administrator Backend Overview

Kentico Hosted Trial Kentico Administrator Backend Overview

নোড . জে এস । Node.js – ইভেন্ট ইমিটার (Event Emitter)

নড জেএসঃ ইভেন্ট ইমিটার
রিদওয়ান বিন শামীম

নড ইমিট ইভেন্টের অনেক অবজেক্ট যেমন net.Server এর সাথে কোনও সদৃশ পিয়ার যুক্ত হলে কোনও ইভেন্টকে ইমিট করে। fs.readStream কোনও ইভেন্টকে ইমিট করে যখন এর ফাইল খোলা থাকে। events.EventEmitter সব ইভেন্ট ইমিট হওয়ার উদাহরণ।

ইভেন্ট ইমিটারের শ্রেণীঃ ইভেন্ট ইমিটারের শ্রেণী events module তে ব্যপিত থাকে।

নিচে উদাহরণ দেয়া হল,

// Import events module
var events = require(‘events’);
// Create an eventEmitter object
var eventEmitter = new events.EventEmitter();

ইভেন্ট ইমিটারের কোনও পর্যায়ে ভুল দেখা দিলে ‘error’ ইভেন্ট দেখানো হয়। নতুন লিসনার যোগ হলে ‘newListener’ ইভেন্ট আর কোনও লিসনার মুছে ফেললে ‘removeListener’ ইভেন্ট প্রদর্শিত হয়। ইভেন্ট ইমিটার on ও emit. এর মত অনেক বৈশিষ্ট্য ধারণ করে।

প্রক্রিয়াঃ

S.N. প্রক্রিয়া
1 addListener(event, listener)

2 on(event, listener)

3 once(event, listener)

4 removeListener(event, listener)

5 removeAllListeners([event])

6 setMaxListeners(n)

7 listeners(event)

8 emit(event, [arg1], [arg2], […])

ক্লাস মেথডঃ
S.N. প্রক্রিয়া
1 listenerCount(emitter, event)

ইভেন্টসঃ
S.No. ইভেন্ট
1 newListener
• event – ইভেন্ট নেমের স্ট্রিং
• listener – ইভেন্ট হ্যান্ডেলার ফাংশন
2 removeListener
• event – ইভেন্ট নেমের স্ট্রিং
• listener – ইভেন্ট হ্যান্ডেলার ফাংশন

উদাহরণঃ নিচের Node.js কোড দ্বারা main.js নামের ফাইল তৈরি করি,

var events = require(‘events’);
var eventEmitter = new events.EventEmitter();

// listener #1
var listner1 = function listner1() {
console.log(‘listner1 executed.’);
}

// listener #2
var listner2 = function listner2() {
console.log(‘listner2 executed.’);
}

// Bind the connection event with the listner1 function
eventEmitter.addListener(‘connection’, listner1);

// Bind the connection event with the listner2 function
eventEmitter.on(‘connection’, listner2);

var eventListeners = require(‘events’).EventEmitter.listenerCount(eventEmitter,’connection’);
console.log(eventListeners + ” Listner(s) listening to connection event”);

// Fire the connection event
eventEmitter.emit(‘connection’);

// Remove the binding of listner1 function
eventEmitter.removeListener(‘connection’, listner1);
console.log(“Listner1 will not listen now.”);

// Fire the connection event
eventEmitter.emit(‘connection’);

eventListeners = require(‘events’).EventEmitter.listenerCount(eventEmitter,’connection’);
console.log(eventListeners + ” Listner(s) listening to connection event”);

console.log(“Program Ended.”);

এখন main.js রান করালে,

$ node main.js

আউটপুট ভেরিফাই করে দেখতে পারি,

2 Listner(s) listening to connection event
listner1 executed.
listner2 executed.
Listner1 will not listen now.
listner2 executed.
1 Listner(s) listening to connection event
Program Ended.

তথ্যসূত্রঃ http://www.tutorialspoint.com/nodejs/nodejs_event_emitter.htm

বাংলাদেশ কারিগরি শিক্ষা বোর্ডের অধিনে HSC BM এবং HSC VOC প্রোগ্রামে ভর্তির অনলাইন আবেদন

বাংলাদেশ কারিগরি শিক্ষা বোর্ডের অধিনে পরিচালিত HSC BM এবং HSC VOC প্রোগ্রামে (২০০৬-২০১৫ সালে SSC/সমতুল্য পাশ) ভর্তির আবেদন অনলাইনে ৩০ জুলাই ২০১৫ পর্যন্ত গ্রহণ করা হবে। ভর্তির ফলাফল ২রা আগস্ট ২০১৫ প্রকাশিত হবে।

 

for Only HSC BM and HSC VOC Under BTEB
Help Line (9:00 AM to 8:00 PM):
01732487334
01731582032

ইউজার ডায়াগ্রাম প্রটোকল

রিদওয়ান বিন শামীম

 

টিসিপি/আইপি প্রটোকল স্যুইটের সরলতম ট্রান্সপোর্ট লেয়ার কমিউনিকেশন প্রটোকল হল ইউজার ডায়াগ্রাম প্রটোকল । এটিতে কম সংখ্যক যোগাযোগ কৌশল প্রয়োগ করা হয়। ইউজার ডায়াগ্রাম প্রটোকলকে অনির্ভরযোগ্য যোগাযোগ প্রটোকল বলা হলেও এটি আইপি সার্ভিস ব্যবহার করে যেটিতে সেরা সরবরাহ কৌশল ব্যবহৃত হয়।

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

ইউজার ডায়াগ্রাম প্রটোকলের রিকোয়ারমেন্টঃ একটি প্রশ্ন উঠতে পারে, অনির্ভরযোগ্য প্রটোকল ব্যবহার করে ডাটা ট্রান্সফারের দরকার কি? আমরা ইউজার ডায়াগ্রাম প্রটোকল তখন ব্যবহার করি যেসব ক্ষেত্রে একনলেজমেন্ট প্যাকেট মূল ডাটার সাথে প্রচুর পরিমান ব্যান্ডউইথ শেয়ার করে। যেমন, ভিডিও স্ট্রিমিংএর সময় এর ব্যবহারকারীর দিকে হাজার হাজার ডাটা প্যাকেটকে ফরোয়ার্ড করা হয়। এসব ডাটা প্যাকেটের সবগুলোর জন্য একনলেজমেন্ট অর্থাৎ প্রাপ্তি সংবাদ ব্যবস্থা করা কঠিন ও তা প্রচুর ব্যান্ডউইথ অপচয় করবে। অন্তর্নিহিত আইপি প্রটোকলের সেরা সরবরাহ কৌশল ডাটা সরবরাহের সর্বোচ্চ সম্ভবনা নিশ্চিত করে। এমনকি ভিডিও স্ট্রিমিংএর সময় অল্প কিছু ডাটা প্যাকেট হারিয়ে গেলেও তা আর তেমন প্রভাব রাখবে না। ভিডিও বা ভয়েজ ট্র্যাফিকের সময় হারানো ডাটা প্যাকেট তেমন প্রভাব রাখে না।

 

ইউজার ডায়াগ্রাম প্রটোকলের বৈশিষ্ট্য

  • ইউজার ডায়াগ্রাম প্রটোকল তখন ব্যবহৃত হয় যখন একনলেজমেন্ট অর্থাৎ প্রাপ্তি সংবাদের কোনও গুরুত্ব নেই,
  • একমুখী ডাটা প্রবাহের জন্য ইউজার ডায়াগ্রাম প্রটোকল বেশি উপযোগী,
  • ইউজার ডায়াগ্রাম প্রটোকল সহজ এবং কোয়েরিভিত্তিক যোগাযোগের জন্য উপযোগী,
  • এটি যোগাযোগ ওরিয়েন্টেড নয়,
  • ইউজার ডায়াগ্রাম প্রটোকল কনজেশন কন্ট্রোল কৌশল ব্যবহারে সক্ষম নয়,
  • এটি ডাটার নির্দেশিত সরবরাহ নিশ্চিত করে না,
  • ইউজার ডায়াগ্রাম প্রটোকল স্টেটবিহীন,
  • স্ট্রিমিং এপ্লিকেশন যেমন ভিওআইপি, মাল্টিমিডিয়া স্ট্রিমিং এর জন্য বেশি উপযোগী।

 

ইউজার ডায়াগ্রাম প্রটোকলের হিডার(header) চারটি মূল প্যারামিটার ব্যবহার করে,

  • সোর্স পোর্ট,
  • ডেসটিনেশন পোর্ট,
  • লেন্থ,
  • চেকসাম

 

যেসব এপ্লিকেশনে ডাটা ট্রান্সফারের জন্য ইউজার ডায়াগ্রাম প্রটোকল ব্যবহৃত হয়,

  • ডোমেইন নেম সার্ভিস,
  • সিম্পল নেটওয়ার্ক মেনেজমেন্ট প্রটোকল,
  • ট্রিভিয়াল ফাইল ট্রান্সফার প্রটোকল,
  • রাউটিং ইনফরমেশন প্রটোকল,
  • কার্বারোতে।

 

ইউনিক্স বেসিক ইউটিলিটিঃ প্রিন্টিং, ইমেইল

রিদওয়ান বিন শামীম

 

ইউনিক্স অপারেটিং সিস্টেম ও এর বেসিক কম্যান্ড সম্পর্কে আপনাদের নিশ্চয়ই কিছু ধারণা হয়েছে, এই টিউটোরিয়ালে এর এমন কিছু বেসিক ইউটিলিটি নিয়ে কাজ করা হবে যা আমাদের দৈনন্দিন জীবনে অনেক কাজে লাগে।

ফাইল প্রিন্ট করা

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

ইউনিক্সের অনেক ভার্সন nroff এবং troff দুটি শক্তিশালী টেক্সট ফরম্যাটার ব্যবহার করতে দেয়, আমরা এখানে এগুলো সম্পর্কে আলোচনা না করলেও ইন্টারনেটে এদের নিয়ে অনেক টিউটোরিয়াল পাওয়া যায়, সেগুলো অনেক হেল্পফুলএসব ইউটিলিটির জন্য।

pr কম্যান্ড

pr কম্যান্ড টার্মিনাল স্ক্রিন বা প্রিন্টারের জন্য ছোটখাটো ফরম্যাটিং করে থাকে, যেমন যদি কোনও ফাইলে নামের লম্বা লিস্ট থেকে থাকে তাহলে আমরা স্ক্রিনে সেগুলোকে দুই বা ততোধিক কলামে ভাগ করে দিতে পারি।

pr কম্যান্ডের সিনট্যাক্স নিচে দেয়া হল,


pr option(s) filename(s)


 

pr কম্যান্ড স্ক্রিনে বা প্রিন্টেড কপিতে পরিবর্তন ও ফরম্যাটিং করে থাকে, এটি মূল ফাইলে কোনও পরিবর্তন সাধন করে না।

 

কিছু pr কম্যান্ড অপশন নিচের ছকে দেখানো হল।

অপশন বর্ণনা
-k আউটপুটে k কলাম গঠন করে
-d আউটপুটে ডবল স্পেস(সবpr ভার্সনে নয়)
-h “header” পরবর্তী আইটেমকে রিপোর্টার হিডার হিসেবে নেয়
-t টপ ও বটম মার্জিন ও হিডার বাদ দেয়
-l PAGE_LENGTH পেজলেন্থ নির্ধারণ করে PAGE_LENGTH (66) lines. টেক্সটের ডিফল্ট লাইন নাম্বার ৫৬
-o MARGIN মার্জিন স্পেস দ্বারা প্রতি লাইনকে অফসেট করানো।
-w PAGE_WIDTH পেজের উইডথ নির্ধারণ করে PAGE_WIDTH (72) characters মাল্টিপল টেক্সট কলাম আউটপুটের জন্য

 

উদাহরণস্বরূপ, food নামের একটি স্যাম্পল ফাইলের জন্য,


$cat food
Sweet Tooth
Bangkok Wok
Mandalay
Afghani Cuisine
Isle of Java
Big Apple Deli
Sushi and Sashimi
Tio Pepe's Peppers
........
$

 

Restaurants হিডারে pr কম্যান্ড ব্যবহার করে দুই কলামে রিপোর্ট লিখলে,


$pr -2 -h "Restaurants" food
Nov 7 9:58 1997 Restaurants Page 1
Sweet Tooth Isle of Java
Bangkok Wok Big Apple Deli
Mandalay Sushi and Sashimi
Afghani Cuisine Tio Pepe's Peppers
........
$

 

lp বা lpr কমান্ড

lp বা lpr কমান্ড কোনও ফাইল স্ক্রিনের পরিবর্তে কাগজে প্রিন্টের জন্য ব্যবহৃত হয়। ডিফল্ট প্রিন্টারে কোনও নির্দিষ্ট ফাইল প্রিন্ট করার জন্য lp বা lpr কমান্ড ব্যবহার করতে হয় যেমন food নামের স্যাম্পল ফাইলের জন্য


$lp food
request id is laserp-525 (1 file)
$

 

lpstat ও lpq কম্যান্ড

lpstat কম্যান্ড নির্দেশ করে প্রিন্টারে কোন কোন ডাটা সারিবদ্ধ আছে যেমন রিকুয়েস্ট আইডি, ওউনার, ফাইল সাইজ এসব। নিজের আউটপুট রিকোয়েস্ট ছাড়া অন্য সব রিকোয়েস্ট দেখতে lpstat –o কম্যান্ড ব্যবহার করা যায়।


$lpstat -o
laserp-573   john   128865  Nov 7 11:27  on laserp
laserp-574   grace  82744   Nov 7 11:28
laserp-575   john   23347   Nov 7 11:35
$

 

lpq, lpstat –o থেকে একটু ভিন্ন ধরণের তথ্য দেয়,


$lpq
laserp is ready and printing
Rank     Owner   Job   Files              Total Size
active   john    573   report.ps          128865 bytes
1st      grace   574   ch03.ps ch04.ps    82744 bytes
2nd      john    575   standard input     23347 bytes
$

 

এখানে প্রথম লাইন প্রিন্টার স্ট্যাটাস বুঝায়, প্রিন্টার অকেজো বা কাগজ না থাকলে প্রথম লাইনে অন্য ম্যাসেজ আসবে।

cancel ও lprm কম্যান্ড

cancel কম্যান্ড lp কম্যান্ড থেকে প্রিন্টিং রিকোয়েস্ট বাদ দেয়, lprm lpr রিকোয়েস্ট বাদ দেয়।


$cancel laserp-575
request "laserp-575" cancelled
$

 

প্রিন্ট হচ্ছে এমন রিকোয়েস্ট বাতিল করতে শুধু নিচের কোড প্রবেশ করাতে হবে,


$cancel laserp
request "laserp-573" cancelled
$

 

Lprm কম্যান্ড চলমান রিকোয়েস্ট বাতিলের জন্য প্রয়োগ করা হয়,


$lprm 575
dfA575diamond dequeued
cfA575diamond dequeued
$

 

ইমেইল প্রেরণ

ইমেইল প্রেরণের সিনট্যাক্স হল,


$mail[-s subject][-c cc-addr][-b bcc-addr] to-addr

 

মেইল কম্যান্ডের গুরুত্বপূর্ণ অপশনগুলো হল,

অপশন বর্ণনা
-s কম্যান্ড লাইনে বিষয় নির্ধারণ
-c ইউজার লিস্ট কার্বন কপি করা। কমা দ্বারা   আলাদা করা তালিকা হতে হবে
-b লিস্টে ব্লাইন্ড কার্বন কপি প্রেরণ করা। কমা দ্বারা   আলাদা করা তালিকা হতে হবে

 

যেমন, admin@yahoo.com তে টেস্ট ম্যাসেজ পাঠাতে কোড,


$mail-s"Test Message" admin@yahoo.com

 

লাইনের শুরুতে “control-D” ব্যবহার করে ম্যাসেজ লিখতে হবে, এটি বন্ধ করতে শুধু dot (.) নিচের মত করে লিখতে হবে,


Hi, 
This is a test
.
Cc:

 

নিচের কোড ব্যবহার করে সম্পূর্ণ ফাইল প্রেরণ করা যায়,


$mail-s"Report 05/06/07" admin@yahoo.com< demo.txt

 

ইনকামিং মেইল চেক করতে ইউনিক্স সিস্টেমে নিচের কোড ব্যবহার করতে হয়,


$mail
no email

 

নোড.জেএস । Node.js – ইভেন্ট লুপ (Node.js – Event Loop)

রিদওয়ান বিন শামীম

 

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

ইভেন্টভিত্তিক প্রোগ্রামিং

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

ইভেন্টভিত্তিক এপ্লিকেশনে একটি মেইন লুপ থাকে যা ইভেন্টের সন্ধান করে, পাওয়া গেলে তাকে কলব্যাক ফাংশনের সাথে সমন্বয় করিয়ে দেয়।

Event Driven Programming

ইভেন্টকে কলব্যাকের সমতুল্য মনে হতে পারে, মূলত পার্থক্য হল, অসমন্বিত ফাংশনের ফলাফল ফেরত আসলে কলব্যাক ফাংশন কাজ করে, আর ইভেন্ট অবজারভার প্যাটার্নে কাজ করে। যেসব ফাংশন ইভেন্টকে শোনে তারা অবজারভাররূপে কাজ করে। কোনও ইভেন্ট বাদ পরলে তার লিসনার ফাংশন সম্পাদন শুরু করে।

নড জেএসের অনেকগুলি বিল্ট ইন ইভেন্ট আছে যা events মডিউলের মাধ্যমে পাওয়া যায় এবং EventEmitter ক্লাস ইভেন্ট ও ইভেন্ট লিসনারের মধ্যে সমন্বয় সাধন করে।


// Import events module
 var events = require('events');
 // Create an eventEmitter object
 var eventEmitter = new events.EventEmitter();

 

নিচের সিনট্যাক্স ইভেন্ট ও ইভেন্ট হ্যান্ডলারের মধ্যে সমন্বয় সাধন করে,


// Bind event and even handler as follows
 eventEmitter.on('eventName', eventHandler);

 

প্রোগ্রামিঙের মাধ্যমে কোনও ইভেন্ট বাদ দিতে,


// Fire an event
 eventEmitter.emit('eventName');

 

উদাহরণ,
main.js নামের জেএস ফাইল তৈরি করি যাতে নিচের কোড থাকবে,


// Import events module
var events = require('events');
// Create an eventEmitter object
var eventEmitter = new events.EventEmitter();
// Create an event handler as follows
var connectHandler = function connected() {
     console.log('connection succesful.'); 

     // Fire the data_received event 
     eventEmitter.emit('data_received');
}
// Bind the connection event with the handler
eventEmitter.on('connection', connectHandler);
 
// Bind the data_received event with the anonymous function
eventEmitter.on('data_received', function(){
     console.log('data received succesfully.');
});
// Fire the connection event 
eventEmitter.emit('connection');
console.log("Program Ended.");

 

প্রোগ্রামটি রান করিয়ে আউটপুট পাব,


$ mnode main.js

 

এটি যে ফলাফল দেখাবে,


 connection succesful.
 data received succesfully.
 Program Ended.

 

যেভাবে নড এপ্লিকেশন কাজ করেঃ অসমন্বিত ফাংশন শেষ প্যারামিটাররূপে কলব্যাককে গ্রহণ করে, কলব্যাক এররকে প্রথম প্যারামিটাররূপে গ্রহণ করে। পূর্বের উদাহরণের মাধ্যমে আবার দেখা যাক, input.txt নামে একটি ফাইল তৈরি করি, যাতে নিচের কোড থাকবে।


Tutorials Point is giving self learning content
 to teach the world in simple and easy way!!!!!

 

main.js নামের ফাইল তৈরি করি যাতে নিচের কোড থাকবে।


var fs = require("fs");

fs.readFile('input.txt', function (err, data) {
   if (err){
      console.log(err.stack);
      return;
   }
   console.log(data.toString());
});
console.log("Program Ended");

এখানে fs.readFile() অসমন্বিত ফাংশন যার কাজ হল ফাইল পড়া। এক্ষেত্রে ভুল হলে err অবজেক্ট দ্বারা সেটি readFile এর মাধ্যমে কলব্যাক ফাংশনে যাবে।

 Program Ended
 Tutorials Point is giving self learning content
 to teach the world in simple and easy way!!!!!

 

 

নোড.জেএস – প্রথম এপ্লিকেশন (Node.js – First Application)

রিদওয়ান বিন শামীম

 

নড জেএসের মাধ্যমে ‘হ্যালো ওয়ার্ল্ড’ তৈরির আগে নড জেএসের এপ্লিকেশনের অংশগুলো দেখে নেয়া যাক, এর তিনটি খুব গুরুত্বপূর্ণ অংশ আছে,

  • ইমপোর্ট রিকোয়ারড মডিউল
  • ক্রিয়েটিভ সার্ভার
  • রিড রিকোয়েস্ট, রিটার্ন রেসপন্স

 

নড জেএস এপ্লিকেশন তৈরি করা

প্রথম ধাপ, প্রয়োজনীয় মডিউল ইমপোর্ট করা

আমরা require ডিরেকটিভ ব্যবহার করব এইচটিটিপি মডিউল লোড করতে, আর রিটার্নড এইচটিটিপি ইন্সটেন্সকে এইচটিটিপি ভেরিয়েবলে নিচের মত করে স্টোর করব,


var http = require("http");

 

দ্বিতীয় ধাপ, সার্ভার তৈরি করা

পরবর্তী ধাপে আমরা তৈরি করা এইচটিটিপি ইন্সটেন্স ব্যবহার করি ও http.createServer() তে কল করা হয় সার্ভার ইনটেন্স তৈরি করতে। এরপরlisten মেথড ব্যবহার করে আমরা একে port 8081এর সাথে সংযুক্ত করি। একটি ফাংশনকে প্যারামিটার রিকোয়েস্ট ও রেসপন্সসহ পাস করানো হয়। নিচের ব্যবহারিক প্রয়োগ ‘হ্যালো ওয়ার্ল্ড’ ফলাফল দেখাবে।


http.createServer(function (request, response) {
     // Send the HTTP header
     // HTTP Status: 200 : OK
     // Content Type: text/plain
     response.writeHead(200, {'Content-Type': 'text/plain'});
     // Send the response body as "Hello World"
     response.end('Hello World\n');
}).listen(8081);
// Console will print the message
console.log('Server running at http://127.0.0.1:8081/');

 

উপরের কোড এমন এইচটিটিপি সার্ভার তৈরির জন্য যথেষ্ট যা লোকাল মেশিনের 8081 portএর সাথে সমন্বয় সাধন করে।

 

তৃতীয় ধাপ, রিকোয়েস্ট ও রেসপন্স টেস্ট করা

main.js ফাইলে পূর্বে উল্লেখিত দুটি ধাপের সমন্বয় করে নিচের নত করে এইচটিটিপি সার্ভার চালু করতে হয়,


var http = require("http");
http.createServer(function (request, response) {
    // Send the HTTP header
    // HTTP Status: 200 : OK
    // Content Type: text/plain
    response.writeHead(200, {'Content-Type': 'text/plain'});
    // Send the response body as "Hello World"
    response.end('Hello World\n');
}).listen(8081);
// Console will print the message
console.log('Server running at http://127.0.0.1:8081/');

 

এখন সার্ভার চালুর জন্য main.jsকে সম্পাদন করতে হয় নিচের মত করে,


$ node main.js

 

আউটপুট ভেরিফাই করলে দেখব, সার্ভার চালু হয়ে গেছে।


Server running at http://127.0.0.1:8081/

 

নড জেএস সার্ভারে রিকোয়েস্ট করা

যেকোনো ব্রাউজারে http://127.0.0.1:8081/ ওপেন করে রেজাল্ট দেখব, ‘হ্যালো ওয়ার্ল্ড’ ।

Node.js server

অভিনন্দন! আমাদের প্রথম এইচটিটিপি সার্ভার তৈরি ও চালু হল যা port 8081 এর সকল এইচটিটিপি রিকোয়েস্টের সাড়া দেয়।