NWPathMonitor iOS এবং macOS-এ Network ফ্রেমওয়ার্কের একটি ক্লাস যা ডিভাইসের নেটওয়ার্ক পাথের অবস্থা নিরীক্ষণের জন্য। Apple Developer Documentation (2025) অনুযায়ী, NWPathMonitor অ্যাপ্লিকেশনকে নেটওয়ার্ক প্রাপ্যতা ট্র্যাক করতে, ইন্টারফেসের ধরন নির্ধারণ করতে এবং সংযোগ পরিবর্তনে সাড়া দিতে অনুমতি দেয়। NWPathMonitor NWPath-এর সাথে একটি সুবিধাজনক কালব্যাকের মাধ্যমে সংযোগের ধরন, ডেটা খরচ এবং ইন্টারনেট প্রাপ্যতা সম্পর্কে তথ্য প্রদান করে।
মূখ্য বিষয়সমূহ
NWPathMonitor Network ফ্রেমওয়ার্কের একটি ক্লাস যা Apple iOS 12 এবং macOS 10.14 Mojave-এ প্রবর্তন করেছে। এটি ডিভাইসের নেটওয়ার্ক পাথে পরিবর্তন ট্র্যাক করার জন্য একটি আধুনিক API প্রদান করে — নেটওয়ার্ক ইন্টারফেসের সমন্বয় যার মাধ্যমে অ্যাপ্লিকেশনের ট্রাফিক প্রবাহিত হয়।
iOS 12-এর আগে, নেটওয়ার্ক নিরীক্ষণের জন্য C-ভিত্তিক SystemConfiguration ফ্রেমওয়ার্কে নির্মিত Reachability লাইব্রেরী ব্যবহার করা হত। NWPathMonitor একটি সমৃদ্ধ API সহ একটি দেশীয় Swift বিকল্প, যা আধুনিক সংযোগের ধরন (VPN, multipath, LTE, 5G) এবং বিল্ট-ইন GCD ইন্টিগ্রেশন সমর্থন করে।
NWPathMonitor এবং Reachability-এর মধ্যে মূল পার্থক্য — NWPath অবজেক্ট শুধুমাত্র একটি বাইনারি “উপলব্ধ/অনুপলব্ধ” স্থিতি নয়, বরং পাথের একটি সম্পূর্ণ ছবি প্রদান করে: ব্যবহৃত ইন্টারফেস, তাদের অগ্রাধিকার, খরচ, রোমিং অবস্থা এবং প্রোক্সি এবং VPN ক্ষমতা। ডিভেলপার নেটওয়ার্ক অনুরোধ সম্পর্কে সিদ্ধান্ত নেওয়ার জন্য ব্যাপক তথ্য পায়।
Network ফ্রেমওয়ার্ক নিম্ন-স্তরের C API — CFStream এবং BSD Sockets-এর আধুনিক বিকল্প হিসেবে আবির্ভূত হয়েছে। এটি watchOS এবং tvOS সহ সমস্ত Apple প্লেটফর্মে নেটওয়ার্ক যোগাযোগের জন্য একটি ইউনিফাইড ইন্টারফেস প্রদান করে। NWPathMonitor NWConnection, NWListener এবং NWBrowser-এর পাশাপাশি এই ফ্রেমওয়ার্কের অংশ।
Network ফ্রেমওয়ার্কটি Swift-এ লেখা এবং অসিংক্রোনাস প্রক্রিয়াকরণের জন্য GCD ব্যবহার করে। এর অর্থ হল NWPathMonitor কালব্যাক নির্দিষ্ট dispatch queue-তে চালিত হয়, যা অ্যাপ্লিকেশনের বিদ্যমান মাল্টিথ্রেডিং আর্কিটেক্চারে ম্যানুয়াল থ্রেড ম্যানেজমেন্ট ছাড়াই সংহত হয়।
NWPathMonitor ব্যবহার করা শুরু হয় ক্লাসের একটি ইন্স্টেন্স তৈরি এবং pathUpdateHandler কালব্যাক কনফিগার করার মাধ্যমে। তারপর start পদ্ধতিটি একটি dispatch queue সহ ডাকা হয় যেখানে ক্লোজারটি চালবে। নিরীক্ষণ cancel পদ্ধতি দ্বারা বন্ধ করা হয়, যা সংসাধনগুলিও মুক্ত করে।
import Network
class NetworkMonitor {
private let monitor = NWPathMonitor()
private let queue = DispatchQueue("monitor")
func startMonitoring() {
monitor.pathUpdateHandler = { path in
if path.status == .satisfied {
print("নেটওয়ার্ক উপলব্ধ")
} else {
print("নেটওয়ার্ক অনুপলব্ধ")
}
}
monitor.start(on: queue)
}
func stopMonitoring() {
monitor.cancel()
}
}
NWPathMonitor শুধুমাত্র একটি নির্দিষ্ট ইন্টারফেস ধরন নিরীক্ষণের জন্য কনফিগার করা যেতে পারে। এর জন্য ইনিশিয়ালাইজার NWPathMonitor(requiredInterfaceType:) ব্যবহার করুন NWInterface.InterfaceType পারামিটার — .wifi, .cellular, .wiredEthernet বা .loopback সহ। কোন ধরন নির্দিষ্ট না করলে, নিরীক্ষণ সমস্ত ইন্টারফেস কভার করে।
ব্যাবহারিক উদাহরণ: একটি স্ট্রিমিং অ্যাপ্লিকেশন শুধুমাত্র Wi-Fi নিরীক্ষণ করতে পারে এবং সেলুলার ডেটায় স্যোইচ করার সম্পর্কে ব্যবহারকারীকে সাবধান করতে পারে। NWPath-এ isConstrained এবং isExpensive যাচাই বর্তমান সংযোগটি মিটারিত বা গতি সীমাবদ্ধ কিনা তা নির্ধারণ করতে সহায়তা করে।
অ্যাপ্লিকেশন লাউন্চ বা আগ্রগামী অবস্থায় প্রবেশের সময় নিরীক্ষণ শুরু করা উচিত এবং পৃষ্ঠভূমিতে প্রবেশে বন্ধ করা উচিত। সম্পূর্ণ অ্যাপ্লিকেশনের জন্য একটি NWPathMonitor ইন্স্টেন্স (singleton) তৈরি করা এবং একটি প্রোটোকল বা সার্ভিস লেয়ারের মাধ্যমে বিভিন্ন মডিউল থেকে ব্যবহার করার পরামর্শ দেওয়া হয়।
NWPath একটি অবজেক্ট যা pathUpdateHandler-এ প্রেরণ করা হয় এবং নেটওয়ার্ক পাথের বর্তমান অবস্থা বর্ণনা করে। এতে পাঁচটি মূল বৈশিষ্ট্য রয়েছে যা অধিকাংশ নেটওয়ার্ক নিরীক্ষণ পরিদৃশ্য কভার করে। NWPath.Status — তিনটি অবস্থা সহ একটি এনুমেরেশন: satisfied (উপলব্ধ), unsatisfied (অনুপলব্ধ) এবং requiresConnection (সংযোগ প্রয়োজন)।
| বৈশিষ্ট্য | ধরন | বর্ণনা |
|---|---|---|
| status | NWPath.Status | বর্তমান পাথ অবস্থা: satisfied, unsatisfied, requiresConnection |
| availableInterfaces | [NWInterface] | সকল উপলব্ধ নেটওয়ার্ক ইন্টারফেসের তালিকা |
| gateways | [NWEndpoint] | রূটিংয়ের জন্য ব্যবহৃত গেটওয়ের তালিকা |
| isExpensive | Bool | True যদি সংযোগটি মিটারিত (সেলুলার ডেটা, ব্যক্তিগত হাটস্পট) |
| isConstrained | Bool | True যদি সংযোগটি গতি সীমাবদ্ধ (নিম্ন ডেটা মোড) |
isExpensive বৈশিষ্ট্যটি বেয়াল ডেটা নিয়ে কাজ করে এমন অ্যাপ্লিকেশনের জন্য একটি গুরুত্বপূর্ণ ফ্ল্যাগ। যদি isExpensive = true হয়, তবে অ্যাপ্লিকেশনটি স্ট্রিমিং গুণমান কমানো, আপডেট ডাউনলোড পিছিয়ে দেওয়া বা ব্যবহারকারীকে সাবধান করা উচিত। isConstrained ইংদিকেট করে যে নিম্ন ডেটা মোড সক্রিয় আছে।
ইন্টারনেট প্রাপ্যতা (শুধু নেটওয়ার্ক নয়) যাচাই করতে, usesInterfaceType পদ্ধতি ব্যবহার করুন। যদি ডিভাইসটি ইন্টারনেট ছাড়া Wi-Fi-এ সংযুক্ত থাকে — NWPath satisfied দেখাতে পারে, কিন্তু প্রকৃত প্রবেশাধিকার অনুপস্থিত। এমন ক্ষেত্রে, NWConnection-এর মাধ্যমে অতিরিক্ত যাচাই প্রয়োজন।
আসুন খরচ পরিচালনা, ইন্টারফেসের ধরন এবং একটি পাবলিশারের মাধ্যমে ViewModel বিজ্ঞপ্তি সহ একটি উন্নত NWPathMonitor বাস্তবায়ন দেখি। উদাহরণটি নেটওয়ার্ক অবস্থা পরিবর্তনে প্রতিক্রিয়াশীল UI আপডেটের জন্য Combine ফ্রেমওয়ার্ক ব্যবহার করে।
import Network
import Combine
final class NetworkManager: ObservableObject {
static let shared = NetworkManager()
@Published private(set) var isConnected = true
@Published private(set) var isExpensive = false
private let monitor = NWPathMonitor()
private let queue = DispatchQueue("NetworkMonitor")
private init() {
monitor.pathUpdateHandler = { [weak self] path in
DispatchQueue.main.async {
self?.isConnected = path.status == .satisfied
self?.isExpensive = path.isExpensive
}
}
monitor.start(on: queue)
}
func checkInterface() -> NWInterface.InterfaceType {
let path = monitor.currentPath
if path.usesInterfaceType(.wifi) { return .wifi }
if path.usesInterfaceType(.cellular) { return .cellular }
return .other
}
}
যখন সংযোগ বিছিন্ন হয়, তখন আপনি শুধু UI জানাতে সীমাবদ্ধ না গিয়ে বিলম্বিত কর্মও করতে পারেন — উদাহরণস্বরূপ, পরবর্তী প্রেরণের জন্য একটি অনুরোখের খসড়া সংরক্ষণ করুন। একটি বিলম্বিত অনুরোধের ক্যু বাস্তবায়ন করুন যা unsatisfied অবস্থায় কাজগুলি সঞ্চয় করে এবং satisfied পুনরুদ্ধার হলে সেগুলি প্রেরণ করে।
এই কাজের জন্য একটি ডিলিগেট সহ ReachabilityManager প্যাটার্ন আদর্শ: NWPathMonitor ম্যানেজারকে জানায়, ম্যানেজার ক্যু এবং UI আপডেট করে। যখন অবস্থা satisfied-এ পরিবর্তিত হয়, ক্যুটি স্বচালিতভাবে খালি হয় এবং UI একটি সংযোগ পুনরুদ্ধার ইংদিকেট পায়।
NWPathMonitor-এর আগে, iOS-এ নেটওয়ার্ক নিরীক্ষণের মানক সমাধান ছিল Apple-এর Reachability লাইব্রেরী (ডকুমেন্টেশন থেকে উদাহরণ), যা SystemConfiguration-এর উপর নির্মিত। প্রধান পার্থক্য: Reachability C-এ SCNetworkReachability-এর মাধ্যমে কাজ করে, আধুনিক নেটওয়ার্ক ধরন সমর্থন করে না, এবং শুধুমাত্র একটি বাইনারি প্রাপ্যতা প্রতিক্রিয়া দেয়।
NWPathMonitor এই সীমাবদ্ধতাগুলি সমাধান করে: এটি Swift-এ লেখা, VPN, multipath, 5G এবং LTE সমর্থন করে, প্রতিটি ইন্টারফেস সম্পর্কে বিস্তারিত তথ্য প্রদান করে এবং GCD-এর মাধ্যমে অসিংক্রোনাসভাবে কাজ করে। Reachability এখনও সর্বনিম্ন iOS 11 এবং তার নিচে সমর্থনকারী প্রজেক্টে ব্যবহৃত হয়।
| বৈশিষ্ট্য | NWPathMonitor | Reachability |
|---|---|---|
| সর্বনিম্ন সংস্করণ | iOS 12 | iOS 2 |
| ভাষা | Swift (Network) | C (SystemConfiguration) |
| ইন্টারফেসের ধরন | Wi-Fi, Cellular, Ethernet, VPN | Wi-Fi, WWAN (সাধারণ) |
| isExpensive | হ্যাঁ | না |
| অসিংক্রোনাস | GCD (dispatch queue) | RunLoop |
| একাধিক ইন্টারফেস | হ্যাঁ (multipath) | না |
যদি আপনার অ্যাপ্লিকেশন iOS 11 এবং তার নিচে সমর্থন করে, তবে Reachability একমাত্র বিকল্প হিসেবে রয়েছে। iOS 12+ প্রজেক্টের জন্য, সরাসরি NWPathMonitor ব্যবহার করার পরামর্শ দেওয়া হয় — এটি আধুনিক Swift কোড, Combine এবং SwiftUI-এর সাথে উত্তম সংহত হয়।
Reachability থেকে NWPathMonitor-এ মাইগ্রেশন সরল: শুধু SCNetworkReachability কলগুলিকে NWPathMonitor দিয়ে প্রতিস্থাপন করুন, একই হ্যান্ডলিং লজিক বজায় রাখুন। একটি এবস্ট্রাক্শন লেয়ার (NetworkMonitorProtocol) অ্যাপ্লিকেশনের ব্যবসায়িক লজিক পরিবর্তন ছাড়াই বাস্তবায়নের মধ্যে স্যোইচ করতে অনুমতি দেবে।
সঙ্ক্রিয় জিজ্ঞাসিত প্রশ্ন
NWPathMonitor iOS 12.0, macOS 10.14, watchOS 5.0 এবং tvOS 12.0 থেকে উপলব্ধ। পুরানো সংস্করণ সমর্থনকারী প্রজেক্টের জন্য, SystemConfiguration থেকে Reachability বা #available-এর মাধ্যমে শর্তমূলক কম্পিলেশন সহ রেপার লাইব্রেরী ব্যবহার করুন।
Satisfied মানে হল ট্রাফিক অন্তত একটি ইন্টারফেসের মাধ্যমে যেতে পারে। Unsatisfied — কোন ইন্টারফেস উপলব্ধ নেই। requiresConnection অবস্থা — পাথটি সংযোগ স্থাপনের আবশ্যকতা (উদাহরণস্বরূপ, VPN সংযুক্ত নয়), এবং ট্রাফিক সাময়িকভাবে যেতে পারে না।
NWPath-এ usesInterfaceType পদ্ধতি ব্যবহার করুন: Wi-Fi-এর জন্য path.usesInterfaceType(.wifi), সেলুলার ডেটার জন্য path.usesInterfaceType(.cellular)। পদ্ধতিটি true ফিরিয়ে দেয় যদি বর্তমান ট্রাফিক নির্দিষ্ট ইন্টারফেস ধরনের মাধ্যমে যায়।
ব্যাটারি বাঁচাতে পৃষ্ঠভূমিতে নিরীক্ষণ বন্ধ রাখার পরামর্শ দেওয়া হয়। applicationDidEnterBackground-এ monitor.cancel() কল করা এবং applicationWillEnterForeground-এ start পুনরায় শুরু করা শক্তি খরচ কমায়। জুরুরি কাজের জন্য Background Task ব্যবহার করুন।
NWPathMonitor ক্যাপ্টিভ পোর্টাল সহও satisfied দেখাতে পারে। প্রকৃত ইন্টারনেট প্রবেশাধিকার নির্ধারণ করতে, NWConnection-এর মাধ্যমে একটি বিশ্বসত এন্ডপয়িন্টে HTTP অনুরোধ চালান। যদি রিডায়েক্ট হয় — পোর্টাল সক্রিয় এবং WebView-এ প্রামাণীকরণ প্রয়োজন।
সারাংশ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন