C# OpenVPN സ്റ്റേറ്റ് ഒബ്സർവർ: സെഷൻ നിരീക്ഷിക്കുക, NIC അല്ല
NetworkAvailabilityChanged ഒരു VPN ഇവന്റ് അല്ല. ടണൽ സ്വന്തമാക്കിയ ക്ലയന്റിന്റെ സ്റ്റേറ്റ് സ്ട്രീം വായിക്കുക, പഴയ പരിശോധനകളിൽ നിന്ന് സംരക്ഷിക്കുക, ഓരോ കണക്ഷനും തയ്യാറെടുപ്പ് പ്രസിദ്ധീകരിക്കുക.
ടണൽ മരിക്കുമ്പോഴും നിങ്ങളുടെ ആപ്ലിക്കേഷൻ പ്രവർത്തിക്കുന്നു. Wi-Fi ഇപ്പോഴും ഓണാണ്, ഇന്റർനെറ്റ് ഇപ്പോഴും പ്രതികരിക്കുന്നു, ആപ്ലിക്കേഷൻ ആശ്രയിക്കുന്ന സ്വകാര്യ API അപ്രാപ്യമായി. ഇവിടെ ആളുകൾ സാധാരണ ആശ്രയിക്കുന്ന .NET ഇവന്റ്, NetworkAvailabilityChanged, ആ സാഹചര്യം ഒട്ടും വിവരിക്കുന്നില്ല. അത് യന്ത്രത്തിന്റെ സമഗ്ര അവസ്ഥയിലെ മാറ്റം റിപ്പോർട്ട് ചെയ്യുന്നു, VPN വിച്ഛേദവും വീണ്ടും ബന്ധിപ്പിക്കലും കഴിഞ്ഞും ആ അവസ്ഥ ശരിയായി തുടരാം. ഒബ്സർവർ ടണൽ സ്വന്തമാക്കിയ ക്ലയന്റിനെ നിരീക്ഷിക്കണം, നെറ്റ്വർക്ക് സ്റ്റാക്കിന്റെ സാരാംശമല്ല.
ലഭ്യത ഒരു സമഗ്ര മൂല്യമാണ്, നിങ്ങളുടെ ടണലല്ല
NetworkAvailabilityChanged യന്ത്രത്തിന്റെ സമഗ്ര ലഭ്യതാ മറുപടി മാറുമ്പോൾ പ്രവർത്തിക്കുന്നു, ആ മറുപടി loopback അല്ലെങ്കിൽ ടണൽ ഒഴികെ ഏതെങ്കിലും സജീവ ഇന്റർഫേസ് കണക്കാക്കുന്നു.
Wi-Fi ഓണായിരിക്കെ VPN വീഴുന്നത് അത് അളക്കുന്നതിൽ ഒന്നും മാറ്റുന്നില്ല, അതിനാൽ നിങ്ങൾക്ക് പ്രധാനമായ ആ പരാജയത്തിന്റെ സമയത്ത് ഇവന്റ് നിശ്ശബ്ദമായിരിക്കാം.
സ്റ്റേറ്റ് സ്ട്രീം ടണൽ സ്വന്തമാക്കിയ ക്ലയന്റിന്റേതാണ്
ഏത് ഘടകം കണക്ഷൻ സ്വന്തമാക്കുന്നുവെന്ന് തിരിച്ചറിയുക: OpenVPN GUI അല്ലെങ്കിൽ സേവനം, OpenVPN Connect, അല്ലെങ്കിൽ നിങ്ങളുടെ ആപ്ലിക്കേഷൻ ആരംഭിച്ച് നിയന്ത്രിക്കുന്ന പ്രോസസ്. ഇവ വ്യത്യസ്ത പിന്തുണയുള്ള ഇന്റർഫേസുകളുള്ള വ്യത്യസ്ത ഉടമകളാണ്, ഒബ്സർവർ വിന്യാസത്തിന് യോജിക്കുന്നത് ഉപയോഗിക്കണം. സംയോജിപ്പിക്കാൻ നിങ്ങൾക്ക് അധികാരമുള്ള OpenVPN പ്രോസസിന്, മാനേജ്മെന്റ് ഇന്റർഫേസ് നിലവിലെ അവസ്ഥ, ചരിത്രം, തത്സമയ അറിയിപ്പുകൾ എന്നിവ റിപ്പോർട്ട് ചെയ്യുന്നു. പ്രാദേശികവൽക്കരിച്ച GUI ശീർഷകത്തിൽ connected എന്ന വാക്ക് തിരയുന്നതിന് പകരം രേഖപ്പെടുത്തിയ ഘടനാപരമായ സന്ദേശങ്ങൾ വിശകലനം ചെയ്യുക.
മാനേജ്മെന്റ് ചാനൽ ഒരു പ്രത്യേകാവകാശ നിയന്ത്രണ ഉപരിതലമാണ്, അതിനാൽ പുതിയ ശ്രോതാവ് തുറക്കരുത്, GUI ഇതിനകം കൈവശമുള്ള ചാനലിനായി അതുമായി തർക്കിക്കരുത്.
ജനറേഷൻ കാവൽക്കാർ പഴയ ഫലങ്ങൾ നിർത്തുന്നു
ഓരോ നിരീക്ഷണവും ഒരു നിർദ്ദിഷ്ട കണക്ഷൻ ശ്രമത്തിന്റേതാണ്. പുതിയ ശ്രമം തുടങ്ങുമ്പോൾ, ചാനൽ നഷ്ടപ്പെടുമ്പോൾ, ക്ലയന്റ് പുറത്തുകടക്കൽ റിപ്പോർട്ട് ചെയ്യുമ്പോൾ ജനറേഷൻ കൗണ്ടർ വർദ്ധിപ്പിക്കുക.
A കണക്ഷനിടയിൽ ആരംഭിച്ച ഒരു പരിശോധന പരിഗണിക്കുക. ടണൽ വീഴുന്നു, B കണക്ഷൻ തുടങ്ങുന്നു, പിന്നീട് A യുടെ വൈകിയ HTTP വിജയം വരുന്നു. കാവൽക്കാരനില്ലെങ്കിൽ ആ പഴയ ഫലം B ഇപ്പോഴും പ്രാമാണീകരിക്കുമ്പോൾ ഡിസ്പ്ലേ പച്ചയാക്കുന്നു. റദ്ദാക്കൽ പാഴായ ജോലി കുറയ്ക്കുന്നു, ജനറേഷൻ പരിശോധനയാണ് പഴയ പൂർത്തീകരണം നിലവിലെ അവസ്ഥയാകുന്നത് തടയുന്നത്:
var generation = _generation;
var reachable = await ProbeAsync(token);
if (generation != _generation) return;
Publish(reachable);
UI അയയ്ക്കലിന് ചുറ്റും അതേ നിയമം പ്രയോഗിക്കുക, കാരണം മാർഷൽ ചെയ്ത അപ്ഡേറ്റ് ജനറേഷൻ മുന്നോട്ട് പോയതിന് ശേഷം വന്നേക്കാം.
ആരംഭവും വീണ്ടും ബന്ധിപ്പിക്കലും ഒരേ ജീവിതചക്രമാണ്
ആദ്യ കണക്ഷൻ, വീണ്ടും ബന്ധിപ്പിക്കൽ, ചാനൽ നഷ്ടം എന്നിവ ഒരു നിയമക്കൂട്ടത്തോടെ ഒരേ ജീവിതചക്രമായി കാണുക:
- ഇന്റർഫേസ് അനുവദിക്കുന്നിടത്ത് ഒരു ഘട്ടത്തിൽ നിലവിലെ അവസ്ഥ വായിച്ച് അറിയിപ്പുകൾ സബ്സ്ക്രൈബ് ചെയ്യുക.
- ഓരോ നിരീക്ഷണവും കണക്ഷൻ ഐഡന്റിറ്റിയും ജനറേഷനും ഉപയോഗിച്ച് ടാഗ് ചെയ്യുക.
- വീണ്ടും ബന്ധിപ്പിക്കൽ, പുറത്തുകടക്കൽ, അല്ലെങ്കിൽ നഷ്ടപ്പെട്ട നിരീക്ഷണ ചാനൽ എന്നിവയിൽ തയ്യാറെടുപ്പ് അസാധുവാക്കുക.
- ഉടമ ആരംഭം പൂർത്തിയായതായി റിപ്പോർട്ട് ചെയ്തതിന് ശേഷം മാത്രം സ്വകാര്യ വിഭവം പരിശോധിക്കുക.
- നിലവിലെ ജനറേഷനിൽ ഇപ്പോഴും ഉള്ള ഫലങ്ങൾ മാത്രം പ്രസിദ്ധീകരിക്കുക.
നഷ്ടപ്പെട്ട ചാനൽ അർത്ഥം അജ്ഞാതം, വിച്ഛേദിതമല്ല. അജ്ഞാതം റിപ്പോർട്ട് ചെയ്യുന്നത് തെളിയിക്കാനാകാത്ത വിച്ഛേദം റിപ്പോർട്ട് ചെയ്യുന്നതിനേക്കാൾ സത്യസന്ധമാണ്, കൂടാതെ വീണ്ടും ശ്രമിക്കുന്ന യുക്തി ഊഹത്തിൽ പ്രവർത്തിക്കുന്നത് തടയുന്നു.
തെളിവുകൾ റിപ്പോർട്ട് ചെയ്യുക, ബൂളിയൻ അല്ല
പേരിട്ട സെഷൻ അവസ്ഥയും വിഭവ തയ്യാറെടുപ്പും വെവ്വേറെ മൂല്യങ്ങളായി തിരികെ നൽകുക, ഓരോന്നിനും പ്രായം. എന്തെങ്കിലും തീരുമാനിക്കേണ്ട ഉപഭോക്താവിന് അവസാന വിജയകരമായ പരിശോധനയ്ക്ക് നാൽപ്പത് സെക്കൻഡ് പ്രായമുണ്ടെന്ന് കാണാം, അത് പുതിയ വിവരത്തിൽ നിന്ന് വ്യത്യസ്തമായ വിവരമാണ്.
പൊതു IP തിരയൽ സ്വകാര്യ API ആവശ്യമായ റൂട്ട് ഉപയോഗിച്ചു എന്നതിന് തെളിവല്ല, അതിനാൽ അത് അങ്ങനെയാണെന്ന് അവതരിപ്പിക്കരുത്.
നിർവ്വഹണം ഒബ്സർവറിന് പുറത്ത് നിർത്തുക
കോൾബാക്ക് സംഭവത്തിന് ശേഷം പ്രവർത്തിക്കുന്നു. സംഭവത്തിനും ഹാൻഡ്ലറിനും ഇടയിൽ യന്ത്രത്തിൽ നിന്ന് ഒരു പാക്കറ്റും പുറത്തുപോയില്ലെന്ന് അതിന് ഉറപ്പ് നൽകാനാവില്ല. ഡിസൈനിന് തടയൽ ആവശ്യമെങ്കിൽ, നെറ്റ്വർക്കിംഗ് നയം അത് നൽകണം, ഒബ്സർവറിന്റെ ജോലി തെളിവുകൾ കോളർക്ക് വിശദീകരിക്കുകയാണ്. രണ്ടും കൂട്ടിച്ചേർത്താൽ ബൂളിയൻ കൈവശമുള്ളതിനാൽ തന്നെ ഫയർവാൾ എന്ന് വിശ്വസിക്കുന്ന കോഡ് ഉണ്ടാകുന്നു. നിർവ്വഹണ പാളി വിരസവും പരിശോധനായോഗ്യവുമായി നിർത്തുക, ഒബ്സർവർ വായനക്കാരനായി തുടരട്ടെ.
അപ്പോൾ UI ചോദ്യം ലളിതമാകുന്നു: അറിയുന്നത് അതിന്റെ പ്രായത്തോടെ കാണിക്കുക, അജ്ഞാതമാകുമ്പോൾ അജ്ഞാതം എന്ന് പറയുക.