🌐 Detecting your location…
📢 Advertisement — Configure AdSense in Appearance → Customize → AdSense Settings

Node.js-এ EADDRINUSE পোর্ট ইতিমধ্যে ব্যবহারের ত্রুটি কীভাবে ঠিক করবেন

⏱️2 min read  ·  273 words

ত্রুটিত্রুটি: শুনুন EADDRINUSE: ঠিকানা ইতিমধ্যেই ব্যবহার করা হচ্ছে :::3000 মানে অন্য একটি প্রক্রিয়া ইতিমধ্যেই আপনার Node.js অ্যাপটি পোর্ট ব্যবহার করছে। এটি বিকাশের সময় সবচেয়ে সাধারণ ত্রুটিগুলির মধ্যে একটি। এখানে এটি ঠিক করার প্রতিটি উপায় আছে.

এই ত্রুটির কারণ কি

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

ঠিক 1: প্রক্রিয়া খুঁজুন এবং হত্যা করুন (macOS/Linux)

# Find the process using port 3000
lsof -i :3000
# COMMAND   PID  USER   FD   TYPE  DEVICE  NODE NAME
# node    12345  you   20u  IPv6  ...     TCP  *:3000 (LISTEN)

# Kill it by PID
kill -9 12345

# Or do it in one command
kill -9 $(lsof -ti :3000)

# Kill all node processes (nuclear option)
killall -9 node

ফিক্স 2: প্রক্রিয়া খুঁজুন এবং হত্যা করুন (উইন্ডোজ)

# Find the process using port 3000
netstat -ano | findstr :3000
# TCP    0.0.0.0:3000    0.0.0.0:0    LISTENING    12345

# Kill it by PID
taskkill /PID 12345 /F

# PowerShell one-liner
Stop-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess -Force

ফিক্স 3: একটি ভিন্ন পোর্ট ব্যবহার করুন

// Make the port configurable via environment variable
const PORT = process.env.PORT || 3000;

app.listen(PORT, () => {
  console.log("Server running on port " + PORT);
});

// Then run with a different port:
// PORT=3001 node server.js

4 সংশোধন করুন: ত্রুটিটি সুন্দরভাবে পরিচালনা করুন

const server = app.listen(PORT);

server.on('error', (err) => {
  if (err.code === 'EADDRINUSE') {
    console.error("Port " + PORT + " busy. Trying " + (PORT + 1));
    server.listen(PORT + 1);  // fall back to next port
  } else {
    throw err;
  }
});

ফিক্স 5: করুণাময় শাটডাউন বাস্তবায়ন করুন (সমস্যা প্রতিরোধ করে)

মূল কারণটি প্রায়শই একটি সার্ভার যা প্রস্থান করার সময় পোর্টটি প্রকাশ করে না। আকর্ষণীয় শাটডাউন হ্যান্ডলার যোগ করুন:

const server = app.listen(PORT, () => {
  console.log("Server running on port " + PORT);
});

function shutdown(signal) {
  console.log(signal + " received. Closing server...");
  server.close(() => {
    console.log("Server closed. Port released.");
    process.exit(0);
  });
  setTimeout(() => {
    console.error("Forced shutdown");
    process.exit(1);
  }, 10000);
}

process.on('SIGTERM', () => shutdown('SIGTERM'));
process.on('SIGINT', () => shutdown('SIGINT'));  // Ctrl+C

ফিক্স 6: ক্লিন রিস্টার্টের জন্য নোডেমন ব্যবহার করুন

npm install --save-dev nodemon

# package.json
{
  "scripts": {
    "dev": "nodemon server.js"
  }
}

# nodemon cleanly restarts and releases ports between reloads
npm run dev

পুনঃব্যবহারযোগ্য কিল-পোর্ট স্ক্রিপ্ট

# kill-port.sh
#!/bin/bash
PORT=${1:-3000}
PID=$(lsof -ti :$PORT)
if [ -n "$PID" ]; then
  echo "Killing process $PID on port $PORT"
  kill -9 $PID
else
  echo "No process on port $PORT"
fi

# Usage: ./kill-port.sh 3000

প্রায়শই জিজ্ঞাসিত প্রশ্ন

প্রশ্ন: আমি আমার অ্যাপ বন্ধ করার পরে কেন পোর্টটি ব্যবহার করা যায় না?
উত্তর: সাধারণত কারণ সকেট ছাড়াই প্রক্রিয়াটি হঠাৎ করে মেরে ফেলা হয়, বা একটি শিশু প্রক্রিয়া এখনও এটি ধরে রাখে। করুণাময় শাটডাউন হ্যান্ডলাররা এটি প্রতিরোধ করে।

প্রশ্নঃ ::: in ‘:::3000’ মানে কি?
A: “সমস্ত ইন্টারফেস” এর জন্য IPv6 স্বরলিপি (যেমন IPv4 তে 0.0.0.0)। আপনার সার্ভার পোর্ট 3000 এর সমস্ত নেটওয়ার্ক ইন্টারফেসের সাথে আবদ্ধ।

প্রশ্ন: দুটি অ্যাপ কি একই পোর্ট শেয়ার করতে পারে?
উত্তর: না – শুধুমাত্র একটি প্রক্রিয়া একটি সময়ে একটি ইন্টারফেসের একটি পোর্টে আবদ্ধ হতে পারে। পথ/ডোমেন দ্বারা রুট করতে বিভিন্ন পোর্ট বা একটি বিপরীত প্রক্সি (nginx) ব্যবহার করুন।

প্রশ্ন: ডকারে আমি কীভাবে এটি এড়াতে পারি?
উত্তর: প্রতিটি কন্টেইনারের নিজস্ব নেটওয়ার্ক নেমস্পেস আছে, তাই দ্বন্দ্ব শুধুমাত্র হোস্ট ম্যাপিংয়ে ঘটে। বিভিন্ন হোস্ট পোর্ট ম্যাপ করুন:-p 3001:3000.

প্রশ্নঃ কিল্লাল নোড কি নিরাপদ?
উত্তর: এটি সমস্ত Node.js প্রক্রিয়াগুলিকে মেরে ফেলে — বিকাশে ভাল, তবে সতর্কতা অবলম্বন করুন যদি আপনার কাছে অন্যান্য নোড অ্যাপ থাকে তবে আপনি থামতে চান না।

উপসংহার

EADDRINUSE মানে পোর্ট আগেই নেওয়া হয়েছে। দ্রুত সমাধান:সঙ্গে প্রক্রিয়া খুঁজুনlsof -ti :PORT এবং মেরে ফেলো. স্থায়ী সংশোধন:আকর্ষণীয় শাটডাউন হ্যান্ডলার যোগ করুন তাই আপনার সার্ভার সর্বদা প্রস্থান করার সময় পোর্টটি প্রকাশ করে এবং ব্যবহার করেnodemon পরিষ্কার পুনঃসূচনা জন্য উন্নয়নে.process.env.PORTএর মাধ্যমে পোর্ট কনফিগারযোগ্য করা হচ্ছে এছাড়াও অবিলম্বে দ্বন্দ্ব এড়িয়ে যায়.

✍️ Leave a Comment

Your email address will not be published. Required fields are marked *

🌐 Read in:🇩🇪 Deutsch🇧🇷 Português🇸🇦 العربية🇮🇳 हिन्दी🇧🇩 বাংলা