{"id":37019,"date":"2019-10-31T22:15:20","date_gmt":"2019-10-31T19:15:20","guid":{"rendered":"https:\/\/prohoster.info\/blog\/sistema-udalennogo-fajlovogo-dostupa-cage\/"},"modified":"2019-10-31T22:15:20","modified_gmt":"2019-10-31T19:15:20","slug":"sistema-udalennogo-fajlovogo-dostupa-cage","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/sistema-udalennogo-fajlovogo-dostupa-cage","title":{"rendered":"System zdalnego dost\u0119pu do plik\u00f3w Cage","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h3>Cel systemu<\/h3>\n<p><\/p>\n<p>Wsparcie zdalnego dost\u0119pu do plik\u00f3w na komputerach w sieci. System \"wirtualnie\" wspiera wszystkie podstawowe operacje plikowe (tworzenie, usuwanie, odczyt, zapis i inne) poprzez wymian\u0119 transakcji (wiadomo\u015bci) za pomoc\u0105 protoko\u0142u TCP.<\/p>\n<p><\/p>\n<h3>Obszary zastosowania<\/h3>\n<p><\/p>\n<p>Funkcjonalno\u015b\u0107 systemu jest efektywna w nast\u0119puj\u0105cych przypadkach:<\/p>\n<ul>\n<li> w natywnych aplikacjach dla urz\u0105dze\u0144 mobilnych i embedded (smartfony, systemy zarz\u0105dzania pok\u0142adowego itp.), kt\u00f3re wymagaj\u0105 szybkiego dost\u0119pu do plik\u00f3w na zdalnych serwerach w warunkach prawdopodobnych przerw w \u0142\u0105czno\u015bci (przechodz\u0105c w tryb offline);<\/li>\n<li> w obci\u0105\u017conych bazach danych, gdy przetwarzanie zapyta\u0144 odbywa si\u0119 na jednych serwerach, a przechowywanie danych \u2013 na innych;<\/li>\n<li> w rozproszonych korporacyjnych sieciach zbierania i przetwarzania informacji, wymagaj\u0105cych wysokiej pr\u0119dko\u015bci wymiany danych, rezerwacji i niezawodno\u015bci;<\/li>\n<li> w z\u0142o\u017conych systemach z architektur\u0105 mikrous\u0142ug, gdzie op\u00f3\u017anienia w wymianie informacji mi\u0119dzy modu\u0142ami maj\u0105 krytyczne znaczenie.<\/li>\n<\/ul>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex> <\/p>\n<h3>Struktura<\/h3>\n<p><\/p>\n<p>System Cage (jest dost\u0119pna realizacja \u2014 wersja beta na Pythonie 3.7 w systemie Windows) obejmuje dwie g\u0142\u00f3wne cz\u0119\u015bci: <\/p>\n<ol>\n<li> <b>Cageserver<\/b> \u2014 program serwera plik\u00f3w (pakiet funkcji), kt\u00f3ry uruchamia si\u0119 na komputerach w sieci, kt\u00f3rych pliki wymagaj\u0105 zdalnego dost\u0119pu;<\/li>\n<li> klasa <b>Cage<\/b> z bibliotek\u0105 metod dla oprogramowania klienckiego, u\u0142atwiaj\u0105ca kodowanie interakcji z serwerami.<\/li>\n<\/ol>\n<p><\/p>\n<h3>U\u017cycie systemu po stronie klient\u00f3w<\/h3>\n<p><\/p>\n<p>Metody klasy Cage zast\u0119puj\u0105 zwyk\u0142e, \"rutynowe\" operacje systemu plik\u00f3w: <i>tworzenie, otwieranie, zamykanie, usuwanie <\/i>plik\u00f3w, a tak\u017ce <i>odczyt\/zapis danych w formacie binarnym<\/i> (z okre\u015bleniem pozycji i rozmiaru danych). Koncepcyjnie te metody s\u0105 zbli\u017cone do funkcji plikowych j\u0119zyka C, gdzie otwieranie\/zamykanie plik\u00f3w odbywa si\u0119 \"na kana\u0142ach\" wej\u015bcia-wyj\u015bcia. <\/p>\n<p><\/p>\n<p>Innymi s\u0142owy, programista pracuje nie z metodami obiekt\u00f3w \"plikowych\" (klasy <b>_io<\/b> w Pythonie), a z metodami klasy Cage.<\/p>\n<p><\/p>\n<p>Podczas tworzenia instancji obiektu Cage nawi\u0105zuje on pocz\u0105tkowe po\u0142\u0105czenie z serwerem (lub kilkoma serwerami), przechodzi autoryzacj\u0119 za pomoc\u0105 Id klienta i otrzymuje potwierdzenie z numerem przydzielonego portu do realizacji wszystkich operacji plikowych. Po usuni\u0119ciu obiektu Cage wydaje on serwerowi polecenie zako\u0144czenia po\u0142\u0105czenia i zamkni\u0119cia plik\u00f3w. Zako\u0144czenie po\u0142\u0105czenia mog\u0105 r\u00f3wnie\u017c inicjowa\u0107 same serwery.<\/p>\n<p><\/p>\n<p>System zwi\u0119ksza wydajno\u015b\u0107 operacji odczytu\/zapisu na podstawie buforowania cz\u0119sto u\u017cywanych fragment\u00f3w plik\u00f3w w pami\u0119ci podr\u0119cznej (buforze) pami\u0119ci operacyjnej.<br \/>\nOprogramowanie klienckie mo\u017ce korzysta\u0107 z dowolnej liczby obiekt\u00f3w Cage z r\u00f3\u017cnymi ustawieniami (pojemno\u015b\u0107 bufora, rozmiar blok\u00f3w podczas wymiany z serwerem itd.). <\/p>\n<p><\/p>\n<p>Jeden obiekt Cage mo\u017ce wymienia\u0107 dane z wieloma plikami na r\u00f3\u017cnych serwerach. Parametry po\u0142\u0105czenia (adres IP lub DNS serwera, g\u0142\u00f3wny port do autoryzacji, \u015bcie\u017cka i nazwa pliku) s\u0105 okre\u015blane przy tworzeniu obiektu.<\/p>\n<p><\/p>\n<p>Poniewa\u017c ka\u017cdy obiekt Cage mo\u017ce jednocze\u015bnie pracowa\u0107 z wieloma plikami, do buforowania wykorzystywana jest wsp\u00f3lna przestrze\u0144 pami\u0119ci. Rozmiar pami\u0119ci podr\u0119cznej - liczba stron i ich rozmiar - jest ustalany dynamicznie przy tworzeniu obiektu Cage. Na przyk\u0142ad, pami\u0119\u0107 podr\u0119czna o pojemno\u015bci 1 GB to 1000 stron po 1 MB, lub 10 000 stron po 100 KB, lub 1 milion stron po 1 KB. Wyb\u00f3r rozmiaru i liczby stron to konkretne zadanie dla ka\u017cdego przypadku u\u017cycia.<\/p>\n<p><\/p>\n<p>Mo\u017cna jednocze\u015bnie u\u017cywa\u0107 wielu obiekt\u00f3w Cage, aby ustali\u0107 r\u00f3\u017cne ustawienia bufora w zale\u017cno\u015bci od specyfiki dost\u0119pu do informacji w r\u00f3\u017cnych plikach. Jako podstawowy zastosowany jest najprostszy algorytm buforowania: po wyczerpaniu ustalonego zakresu pami\u0119ci nowe strony wypieraj\u0105 stare na zasadzie minimalnej liczby odwo\u0142a\u0144. Buforowanie jest szczeg\u00f3lnie efektywne w przypadku nier\u00f3wnomiernego (w sensie statystycznym) wsp\u00f3\u0142dzielenia dost\u0119pu, po pierwsze, do r\u00f3\u017cnych plik\u00f3w, a po drugie, do fragment\u00f3w ka\u017cdego pliku. <\/p>\n<p><\/p>\n<p>Klasa Cage wspiera wej\u015bcie\/wyj\u015bcie nie tylko po adresach danych (z okre\u015bleniem pozycji i d\u0142ugo\u015bci tablicy, \u201ezast\u0119puj\u0105c\u201d operacje systemu plik\u00f3w), ale tak\u017ce na ni\u017cszym, \u201efizycznym\u201d poziomie - po numerach stron w pami\u0119ci podr\u0119cznej. <\/p>\n<p><\/p>\n<p>Obiekty Cage obs\u0142uguj\u0105 oryginaln\u0105 funkcj\u0119 <i>\u201ehibernacji\u201d<\/i> (\u00absny\u00bb) \u2013 mo\u017cna je \u201ezwin\u0105\u0107\u201d (na przyk\u0142ad w przypadku utraty po\u0142\u0105czenia z serwerami lub zatrzymania aplikacji itp.) w lokalny plik dump na stronie klienta i szybko przywr\u00f3ci\u0107 z tego pliku (po wznowieniu po\u0142\u0105czenia, przy ponownym uruchomieniu aplikacji). To pozwala na znaczne zmniejszenie ruchu przy aktywacji pracy programu klienckiego po tymczasowym odej\u015bciu \u201ew trybie offline\u201d, poniewa\u017c cz\u0119sto u\u017cywane fragmenty plik\u00f3w ju\u017c b\u0119d\u0105 znajdowa\u0107 si\u0119 w pami\u0119ci podr\u0119cznej.<\/p>\n<p><\/p>\n<p>Cage \u2014 to oko\u0142o 3600 linii kodu.<\/p>\n<p><\/p>\n<h3>Zasady budowy serwer\u00f3w<\/h3>\n<p><\/p>\n<p>Pliki serwer\u00f3w Cageserver mo\u017cna uruchamia\u0107 z dowoln\u0105 liczb\u0105 port\u00f3w, z kt\u00f3rych jeden (\u201eg\u0142\u00f3wny\u201d) jest u\u017cywany tylko do autoryzacji wszystkich klient\u00f3w, a pozosta\u0142e \u2014 do wymiany danych. Program serwera Cage wymaga jedynie Pythona. R\u00f3wnolegle komputer z serwerem plikowym mo\u017ce wykonywa\u0107 jak\u0105kolwiek inn\u0105 prac\u0119. <\/p>\n<p><\/p>\n<p>Serwer uruchamia si\u0119 najpierw jako zbi\u00f3r dw\u00f3ch g\u0142\u00f3wnych proces\u00f3w:<\/p>\n<ol>\n<li><b>\u201ePo\u0142\u0105czenia\u201d<\/b> \u2013 proces do realizacji operacji nawi\u0105zywania i ko\u0144czenia po\u0142\u0105cze\u0144 z klientami z inicjatywy serwera;<\/li>\n<li><b>\u201eOperacje\u201d<\/b> \u2013 proces do realizacji zada\u0144 (operacji) klient\u00f3w zwi\u0105zanych z plikami, a tak\u017ce do zamykania sesji po\u0142\u0105cze\u0144 na polecenia klient\u00f3w.<\/li>\n<\/ol>\n<p><\/p>\n<p>Oba procesy nie s\u0105 synchronizowane i zorganizowane jako niesko\u0144czone cykle odbierania i wysy\u0142ania wiadomo\u015bci na podstawie wieloprocesowych kolejek, obiekt\u00f3w proxy, blokad i gniazd.<br \/>\nProces \u201ePo\u0142\u0105czenia\u201d przydziela ka\u017cdemu klientowi port do przesy\u0142ania danych. Liczba port\u00f3w jest okre\u015blana podczas uruchamiania serwera. Zgodno\u015b\u0107 mi\u0119dzy portami a klientami jest przechowywana w pami\u0119ci proxy dzielonej mi\u0119dzy procesami.<\/p>\n<p><\/p>\n<p>Proces \u201eOperacje\u201d wspiera podzia\u0142 zasob\u00f3w plikowych, przy czym kilku r\u00f3\u017cnych klient\u00f3w mo\u017ce wsp\u00f3lnie (<i>quasi-r\u00f3wnolegle<\/i>, poniewa\u017c dost\u0119p jest zarz\u0105dzany przez blokady) odczytywa\u0107 dane z jednego pliku, je\u015bli zosta\u0142o to dozwolone podczas jego pocz\u0105tkowego otwarcia przez \u201epierwszego\u201d klienta. \n<\/p>\n<p>Przetwarzanie polece\u0144 dotycz\u0105cych tworzenia\/usuwania\/otwierania\/zamykania plik\u00f3w na <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/pl\/server\/dts-dronten\/\"   title=\"serwerze\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"2497\">serwerze<\/a> jest realizowane w samym procesie \u201eOperacje\u201d \u015bci\u015ble sekwencyjnie z u\u017cyciem systemu plik\u00f3w OS serwera.<\/p>\n<p><\/p>\n<p>Aby przyspieszy\u0107 operacje odczytu\/zapisu, s\u0105 one wykonywane w w\u0105tkach (threads) generowanych przez proces \u201eOperacje\u201d. Liczba w\u0105tk\u00f3w zazwyczaj odpowiada liczbie otwartych plik\u00f3w. Zadania na odczyt\/zapis od klient\u00f3w trafiaj\u0105 do wsp\u00f3lnej kolejki, a pierwszy dost\u0119pny w\u0105tek pobiera zadanie z jej pocz\u0105tku. Specjalna logika umo\u017cliwia wykluczenie operacji nadpisywania danych w pami\u0119ci operacyjnej serwera.<\/p>\n<p><\/p>\n<p>Proces \u201eOperacje\u201d monitoruje aktywno\u015b\u0107 klient\u00f3w i przerywa ich obs\u0142ug\u0119 zar\u00f3wno na ich polecenie, jak i po przekroczeniu limitu czasu bezczynno\u015bci.<\/p>\n<p><\/p>\n<p>Aby zapewni\u0107 niezawodno\u015b\u0107, Cageserver prowadzi dzienniki wszystkich transakcji. Jeden wsp\u00f3lny dziennik zawiera kopie wiadomo\u015bci od klient\u00f3w z zadaniami na tworzenie\/otwieranie\/zmienianie nazw\/usuwanie plik\u00f3w. Dla ka\u017cdego pliku roboczego tworzony jest oddzielny dziennik, w kt\u00f3rym zapisywane s\u0105 kopie wiadomo\u015bci z zadaniami na odczyt i zapis danych w tym pliku roboczym, a tak\u017ce tablice zapisywanych (nowych) danych oraz tablice danych, kt\u00f3re zosta\u0142y zniszczone w wyniku nadpisania (zapisu nowych danych \u201ena starych\u201d). <\/p>\n<p><\/p>\n<p>Te dzienniki umo\u017cliwiaj\u0105 zar\u00f3wno przywracanie nowych zmian w kopiach zapasowych, jak i \u201ecofanie\u201d si\u0119 od aktualnej zawarto\u015bci do okre\u015blonego momentu w przesz\u0142o\u015bci. <\/p>\n<p><\/p>\n<p>Cageserver to oko\u0142o 3100 linii kodu.<\/p>\n<p>\n<img decoding=\"async\" alt=\"System zdalnego dost\u0119pu do plik\u00f3w Cage\" src=\"\/wp-content\/uploads\/2019\/08\/606d593347d73274b0c172dae34da0d7.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Uruchamianie programu serwera plik\u00f3w Cageserver<\/h3>\n<p><\/p>\n<p>Podczas uruchamiania w dialogu nale\u017cy okre\u015bli\u0107:<br \/>\n \u2014 g\u0142\u00f3wny port do autoryzacji;<br \/>\n \u2014 liczb\u0119 port\u00f3w do wymiany transakcji z autoryzowanymi klientami (od 1 i wi\u0119cej, pula numer\u00f3w zaczyna si\u0119 od nast\u0119pnego po numerze g\u0142\u00f3wnego portu).<\/p>\n<p><\/p>\n<h3>U\u017cycie klasy Cage<\/h3>\n<p><\/p>\n<p><b>class<\/b> cage.<b>Cage<\/b>( <i>cage_name=\u00ab\u00bb, pagesize=0, numpages=0, maxstrlen=0, server_ip={}, wait=0, awake=False, cache_file=\u00ab\u00bb<\/i> )<\/p>\n<p><\/p>\n<p>Z tej klasy tworzony jest obiekt, kt\u00f3ry umo\u017cliwia interakcj\u0119 z serwerami plik\u00f3w i zawiera pami\u0119\u0107 buforow\u0105.<\/p>\n<p><\/p>\n<p><b><u>Ustawienia<\/u><\/b><\/p>\n<p><\/p>\n<ul>\n<li> <b>cage_name<\/b>(<i>str<\/i>) \u2014 nazwa obiektu, kt\u00f3ra jest u\u017cywana do identyfikacji klient\u00f3w po stronie serwera <\/li>\n<li> <b>pagesize<\/b>(<i>int<\/i>) \u2014 rozmiar jednej strony pami\u0119ci buforowej (w bajtach)<\/li>\n<li> <b>numpages<\/b>(<i>int<\/i>) \u2014 liczba stron pami\u0119ci buforowej<\/li>\n<li> <b>maxstrlen<\/b>(<i>int<\/i>) \u2014 maksymalna d\u0142ugo\u015b\u0107 bajtowego ci\u0105gu w operacjach zapisu i odczytu<\/li>\n<li> <b>server_ip<\/b>(<i>dict<\/i>) \u2014 s\u0142ownik z adresami u\u017cywanymi <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/pl\/server\/\"   title=\"serwer\u00f3w\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"1347\">serwer\u00f3w<\/a>, gdzie kluczem jest warunkowa nazwa serwera (id serwera wewn\u0105trz aplikacji), a warto\u015bci\u0105 jest ci\u0105g z adresem: \u201eadres IP:port\u201d lub \u201eDNS:port\u201d (mapowanie nazw i rzeczywistych adres\u00f3w \u2014 tymczasowe, mo\u017cna je zmienia\u0107)<\/li>\n<li> <b>wait<\/b>(<i>int<\/i>) \u2014 czas oczekiwania na odpowied\u017a serwera przy uzyskiwaniu port\u00f3w (w sek.)<\/li>\n<li> <b>budzi\u0107<\/b>(<i>boolean<\/i>) \u2014 flaga metody tworzenia obiektu (<i>Fa\u0142sz<\/i> \u2014 je\u017celi tworzony jest nowy obiekt, <i>Prawda<\/i> \u2014 je\u017celi obiekt jest tworzony z wcze\u015bniej \u201ewstrzymanego\u201d \u2014 zastosowaniem operacji \u201ehibernacji\u201d, domy\u015blnie Fa\u0142sz)<\/li>\n<li> <b>cache_file<\/b>(<i>str<\/i>) \u2014 nazwa pliku do hibernacji<\/li>\n<\/ul>\n<p><\/p>\n<p><b><u>Metody<\/u><\/b><\/p>\n<p><\/p>\n<p>Klatka.<b>file_create<\/b>( <i>serwer, \u015bcie\u017cka<\/i> ) \u2013 utworzy\u0107 nowy plik<\/p>\n<p><\/p>\n<p>Klatka.<b>file_rename<\/b>( <i>serwer, \u015bcie\u017cka, nowa_nazwa<\/i> ) \u2013 zmieni\u0107 nazw\u0119 pliku<\/p>\n<p><\/p>\n<p>Klatka.<b>file_remove<\/b>( <i>serwer, \u015bcie\u017cka<\/i>) \u2013 usun\u0105\u0107 plik<\/p>\n<p><\/p>\n<p>Klatka.<b>open<\/b>( <i>serwer, \u015bcie\u017cka, mod <\/i>) \u2013 otworzy\u0107 plik<\/p>\n<p><\/p>\n<p>Zwraca <i>fchannel<\/i> numer kana\u0142u. Parametr <i>mod<\/i> \u2014 to tryb otwierania pliku: \u201ewm\u201d \u2014 monopolowy (odczyt\/zapis), \u201ers\u201d \u2014 tylko odczyt, i dzielony tylko do odczytu przez innych klient\u00f3w, \u201ews\u201d \u2014 odczyt\/zapis, i dzielony tylko do odczytu przez innych klient\u00f3w. <\/p>\n<p><\/p>\n<p>Klatka.<b>zamkn\u0105\u0107<\/b> (<i>fchannel<\/i>) \u2013 zamkn\u0105\u0107 plik<\/p>\n<p><\/p>\n<p>Klatka.<b>write <\/b>(<i>fchannel, begin, data <\/i>) \u2013 zapisa\u0107 ci\u0105g bajt\u00f3w do pliku<\/p>\n<p><\/p>\n<p>Klatka.<b>read <\/b>(<i>fchannel, begin, len_data<\/i> ) \u2013 odczyta\u0107 ci\u0105g bajt\u00f3w z pliku<\/p>\n<p><\/p>\n<p>Klatka.<b>put_pages <\/b>( <i>fchannel<\/i> ) \u2013 \u201ewypycha\u201d z bufora na serwer wszystkie zmodyfikowane strony wskazanego kana\u0142u. U\u017cywane w tych punktach algorytmu, kiedy trzeba si\u0119 upewni\u0107, \u017ce wszystkie operacje na kanale s\u0105 fizycznie zapisane w pliku na serwerze.<\/p>\n<p><\/p>\n<p>Klatka.<b>push_all<\/b> () \u2013 \u201ewypycha\u201d z bufora na serwer wszystkie zmodyfikowane strony wszystkich kana\u0142\u00f3w dla instancji klasy Cage. U\u017cywane, kiedy trzeba si\u0119 upewni\u0107, \u017ce wszystkie operacje na wszystkich kana\u0142ach zosta\u0142y zapisane na serwerze.<\/p>\n<p>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/463085\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0444\u0430\u0439\u043b\u0430\u043c \u043d\u0430 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430\u0445 \u0432 \u0441\u0435\u0442\u0438. \u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u00ab\u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u00bb \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0432\u0441\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 (\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435, \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435, \u0447\u0442\u0435\u043d\u0438\u0435, \u0437\u0430\u043f\u0438\u0441\u044c \u0438 \u0434\u0440.) \u043f\u0443\u0442\u0451\u043c \u043e\u0431\u043c\u0435\u043d\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f\u043c\u0438 (\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438) \u043f\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 \u0422\u0421\u0420. \u041e\u0431\u043b\u0430\u0441\u0442\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0424\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u0435\u043d \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445: \u0432 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445 \u0434\u043b\u044f \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u0438 embedded \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 (\u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u044b, \u0431\u043e\u0440\u0442\u043e\u0432\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u0442.\u043f.), \u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0438\u0445 \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":27748,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-37019","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0444\u0430\u0439\u043b\u0430\u043c \u043d\u0430 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430\u0445 \u0432 \u0441\u0435\u0442\u0438.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/sistema-udalennogo-fajlovogo-dostupa-cage\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 Cage | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0444\u0430\u0439\u043b\u0430\u043c \u043d\u0430 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430\u0445 \u0432 \u0441\u0435\u0442\u0438.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/sistema-udalennogo-fajlovogo-dostupa-cage\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:15:20+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:15:20+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47System zdalnego dost\u0119pu do plik\u00f3w Cage | ProHoster","description":"Cel systemu Wsparcie zdalnego dost\u0119pu do plik\u00f3w na komputerach w sieci.","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/sistema-udalennogo-fajlovogo-dostupa-cage","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 Cage | ProHoster","og:description":"\u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0444\u0430\u0439\u043b\u0430\u043c \u043d\u0430 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430\u0445 \u0432 \u0441\u0435\u0442\u0438.","og:url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/sistema-udalennogo-fajlovogo-dostupa-cage","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:15:20+00:00","article:modified_time":"2019-10-31T19:15:20+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"37019","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-02-09 21:52:49","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:34:26","updated":"2026-02-09 21:52:49","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/37019","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=37019"}],"version-history":[{"count":2,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/37019\/revisions"}],"predecessor-version":[{"id":159779,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/37019\/revisions\/159779"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/27748"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=37019"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=37019"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=37019"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}