Pahuhopu ʻōnaehana
Kākoʻo no ke komo mamao i nā faila ma nā kamepiula ma ka pūnaewele. Kākoʻo ka ʻōnaehana "kokoke" i nā hana faila maʻamau (hana, holoi, heluhelu, kākau, a me nā mea ʻē aʻe) ma o ka hoʻololi ʻana i nā hana (mau memo) me ka hoʻohana ʻana i ka protocol TCP.
Nā noi
Pono ka hana o ka ʻōnaehana i nā hihia penei:
- i nā noi ʻōiwi no nā polokalamu kelepona a i hoʻopili ʻia (smartphones, nā ʻōnaehana hoʻokele ma luna o ka papa, a me nā mea ʻē aʻe) e koi wikiwiki i nā faila ma nā kikowaena mamao i mua o ka hiki ke hoʻopau i ke kamaʻilio ʻana (me ka hele ʻana i waho);
- i nā DBMS i hoʻouka ʻia, inā hoʻokō ʻia ka hana nīnau ma kekahi mau kikowaena, a mālama ʻia ka mālama ʻikepili ma luna o nā mea ʻē aʻe;
- i nā ʻoihana hui puʻupuʻu no ka hōʻiliʻili ʻana a me ka hoʻoili ʻana i ka ʻike, e koi ana i ka hoʻololi ʻana i ka wikiwiki kiʻekiʻe, redundancy a me ka hilinaʻi;
- i nā ʻōnaehana paʻakikī me ka hoʻolālā microservice, kahi mea koʻikoʻi ka lohi o ka hoʻololi ʻana i ka ʻike ma waena o nā modula.
'ole
ʻO ka ʻōnaehana Cage (aia kahi hoʻokō - beta version ma Python 3.7 ma Windows) ʻelua mau ʻāpana nui:
- Cageserver - he polokalamu kikowaena waihona (kahi pūʻolo o nā hana) e holo ana ma nā kamepiula ma ka pūnaewele nona nā faila e pono ai ke komo mamao;
- класс Wai me kahi waihona o nā ʻano no ka lako polokalamu mea kūʻai aku, e hoʻomaʻamaʻa i ka coding o ka launa pū ʻana me nā kikowaena.
Ke hoʻohana nei i ka ʻōnaehana ma ka ʻaoʻao o ka mea kūʻai aku
Hoʻololi nā ʻano o ka papa Cage i ka hana maʻamau, "maʻamau" ʻōnaehana faila: hana, wehe, pani, holoi faila, a me heluhelu/kākau ʻikepili ma ke ʻano binary (e hōʻike ana i ke kūlana a me ka nui o ka ʻikepili). ʻO ka manaʻo, ua kokoke kēia mau ʻano i nā hana faila o ka ʻōlelo C, kahi i hana ʻia ai ka wehe / pani ʻana i nā faila "ma nā kahawai" o ka hoʻokomo / puka.
I nā huaʻōlelo ʻē aʻe, ʻaʻole hana ka mea papahana me nā ʻano o nā mea "file" (class _io ma Python), akā me nā ʻano o ka papa Cage.
Ke hana ʻia kahi laʻana o kahi mea Cage, hoʻokumu ia i kahi pilina mua me kahi kikowaena (a i ʻole kekahi mau kikowaena), ua ʻae ʻia e ka Client Id, a loaʻa iā ia ka hōʻoia me kahi helu awa i hoʻolaʻa ʻia no nā hana faila. Ke holoi ʻia kahi mea Cage, aʻo ia i ke kikowaena e hoʻōki i ke kamaʻilio ʻana a pani i nā faila. Hiki ke hoʻomaka ʻia ka hoʻopau ʻana o ke kamaʻilio e nā kikowaena ponoʻī.
Hoʻomaikaʻi ka ʻōnaehana i ka hana heluhelu a kākau ʻana ma o ka hoʻopaʻa ʻana i nā ʻāpana faila i hoʻohana pinepine ʻia o nā polokalamu mea kūʻai aku ma ka RAM cache (buffer).
Hiki i nā polokalamu kelepona ke hoʻohana i kekahi helu o nā mea Cage me nā hoʻonohonoho like ʻole (ka nui o ka hoʻomanaʻo hoʻomanaʻo, ka nui o ka poloka i ka wā e hoʻololi ai me ke kikowaena, etc.).
Hiki i kahi mea Cage ke kamaʻilio me nā faila he nui ma nā kikowaena lehulehu. Hōʻike ʻia nā ʻāpana kamaʻilio ( IP address a i ʻole DNS server, awa nui no ka ʻae ʻana, ala a me ka inoa faila) i ka wā e hana ai i ka mea.
No ka mea hiki i kēlā me kēia mea Cage ke hana me nā faila he nui i ka manawa like, hoʻohana ʻia ka wahi hoʻomanaʻo like no ka buffering. ʻO ka nui o ka cache - ka helu o nā ʻaoʻao a me ko lākou nui, ua hoʻonohonoho ikaika ʻia i ka wā e hana ana i kahi mea Cage. No ka laʻana, he 1 mau ʻaoʻao o 1000 MB kēlā me kēia, a i ʻole 1 tausani ʻaoʻao o 10 KB kēlā me kēia, a i ʻole 100 miliona ʻaoʻao o 1 KB kēlā me kēia. ʻO ke koho ʻana i ka nui a me ka helu o nā ʻaoʻao he hana kikoʻī no kēlā me kēia hihia noi.
Hiki iā ʻoe ke hoʻohana i nā mea Cage he nui i ka manawa like e wehewehe i nā hoʻonohonoho hoʻomanaʻo buffer like ʻole ma muli o ke ʻano o ka loaʻa ʻana o ka ʻike ma nā faila like ʻole. Ma ke ʻano he kumu, hoʻohana ʻia ka algorithm buffering maʻalahi: ma hope o ka pau ʻana o ka nui o ka hoʻomanaʻo, hoʻoneʻe ʻia nā ʻaoʻao hou i nā mea kahiko e like me ke kumu o ka hoʻomaha ʻana me ka liʻiliʻi o ka hiki. ʻOi aku ka maikaʻi o ka hoʻopaʻa ʻana ma ke ʻano o ka loaʻa ʻole ʻana (ma ke ʻano helu helu), ka mua, i nā faila like ʻole, a, ʻo ka lua, i nā ʻāpana o kēlā me kēia faila.
Kākoʻo ka papa Cage i ka I/O ʻaʻole wale ma nā helu helu ʻikepili (e hōʻike ana i ke kūlana a me ka lōʻihi o ka hoʻonohonoho, "hoʻololi" i nā hana ʻōnaehana faila), akā ma kahi haʻahaʻa, "kino" pae - ma nā helu ʻaoʻao i ka hoʻomanaʻo buffer.
Kākoʻo ʻia ka hana kumu no nā mea Cage "hibernation" ("moe") - hiki iā lākou ke "hāʻule" (no ka laʻana, i ka hopena o ka nalowale o ka pilina me nā kikowaena, a i ka wā i hoʻōki ʻia ai ka noi, a me nā mea ʻē aʻe) i loko o kahi faila dump kūloko ma ka ʻaoʻao o ka mea kūʻai aku a hoʻihoʻi koke mai. kēia faila (ma hope o ka hoʻomaka ʻana o ke kamaʻilio ʻana, ke hoʻomaka hou ʻoe i ka noi). ʻO kēia ka mea hiki ke hōʻemi nui i ke kaʻa i ka wā e hoʻāla ai i ka polokalamu mea kūʻai aku ma hope o ka hele ʻana i ka "pahemo," no ka mea aia nā ʻāpana faila i hoʻohana pinepine ʻia i loko o ka cache.
ʻO ka Cage ma kahi o 3600 laina o ke code.
Nā loina o ka hana kikowaena
Hiki ke holo ʻia nā kikowaena faila Cageserver me ka helu ʻole o nā awa, hoʻohana ʻia kekahi o ia ("main") no ka ʻae ʻana o nā mea kūʻai aku a pau, hoʻohana ʻia ke koena no ka hoʻololi ʻikepili. Pono ka polokalamu kikowaena Cage iā Python wale nō. Ma ka like, hiki i ke kamepiula me ka waihona waihona ke hana i kekahi hana ʻē aʻe.
Hoʻomaka mua ke kikowaena ma ke ʻano he hōʻiliʻili o nā kaʻina hana nui ʻelua:
- "Hoʻohui" - he kaʻina hana no ka hana ʻana i ka hoʻokumu ʻana i ka kamaʻilio me nā mea kūʻai aku a hoʻopau iā ia ma ka hoʻomaka ʻana o ke kikowaena;
- "Nā hana" - he kaʻina hana no ka hana ʻana i nā hana (nā hana) o nā mea kūʻai aku e hana me nā faila, a me ka pani ʻana i nā kau kamaʻilio e pili ana i nā kauoha a ka mea kūʻai aku.
ʻAʻole hoʻonohonoho ʻia nā kaʻina ʻelua a ua hoʻonohonoho ʻia e like me nā puka lou pau ʻole o ka loaʻa ʻana a me ka hoʻouna ʻana i nā leka e pili ana i nā queues multiprocess, nā mea koho, nā laka a me nā kumu.
Hoʻokaʻawale ke kaʻina hana i kahi awa no kēlā me kēia mea kūʻai aku e loaʻa a hoʻouna i ka ʻikepili. Hoʻonohonoho ʻia ka helu o nā awa i ka wā e hoʻomaka ai ke kikowaena. Mālama ʻia ka palapala ʻāina ma waena o nā awa a me nā mea kūʻai aku i loko o ka hoʻomanaʻo proxy-shared proxy.
Kākoʻo ke kaʻina hana i ke kaʻana like ʻana i nā kumuwaiwai faila i hiki i nā mea kūʻai like ʻole ke kaʻana like (like-parallel, no ka mea, hoʻomalu ʻia ke komo ʻana e nā laka) heluhelu i ka ʻikepili mai kahi faila inā ʻae ʻia kēia i ka wā i wehe mua ʻia ai e ka mea kūʻai aku "mua".
Hana ʻia ka hana ʻana o nā kauoha e hana / holoi / wehe / pani i nā faila ma ka server ma ke kaʻina "Operations" ponoʻī me ka hoʻohana ʻana i ka subsystem file o ka server OS.
I mea e wikiwiki ai i ka heluhelu/kākau ʻana, hana ʻia kēia mau hana ma nā pae i hoʻokumu ʻia e ke kaʻina hana "Operations". ʻO ka nui o nā loina e like me ka helu o nā faila i wehe ʻia. Hoʻouna ʻia nā hana heluhelu/kākau mai nā mea kūʻai aku i ka pila maʻamau a lawe ka pae manuahi mua i ka hana mai kona poʻo. ʻO ka loiloi kūikawā hiki iā ʻoe ke hoʻopau i nā hana kākau hou ʻana i ka ʻikepili i ka RAM o ka server.
Mālama ke kaʻina hana i ka hana a nā mea kūʻai aku a hoʻōki i ka lawelawe ʻana iā lākou ma luna o kā lākou kauoha a i ʻole i ka wā i hala ʻole ai ka manawa hana ʻole.
No ka hōʻoia ʻana i ka hilinaʻi, mālama ʻo Cageserver i nā lāʻau o nā hana āpau. Aia kekahi moʻolelo maʻamau i nā kope o nā memo mai nā mea kūʻai aku me nā hana e hana/wehe/hōʻano hou/ holoi i nā faila. Hoʻokumu ʻia kahi log kaʻawale no kēlā me kēia faila hana, kahi e hoʻopaʻa ʻia ai nā kope o nā memo me nā hana no ka heluhelu ʻana a me ke kākau ʻana i ka ʻikepili i loko o kēia faila hana, a me nā pūʻulu o nā ʻikepili i kākau ʻia (hou) a me nā ʻano o ka ʻikepili i luku ʻia i ka wā o ke kākau ʻana (kākau). ʻikepili hou "ma luna" o nā mea kahiko). ).
Hāʻawi kēia mau lāʻau i ka hiki ke hoʻihoʻi i nā hoʻololi hou i nā waihona a hoʻihoʻi i nā ʻike o kēia manawa i kahi manawa i hala.
ʻO Cageserver ma kahi o 3100 laina o ke code.
Ke hoʻomaka nei i ka polokalamu kikowaena faila Cageserver
I ka hoʻomaka ʻana, pono ʻoe e wehewehe i ka dialog:
— awa nui no ka mana;
- ka helu o nā awa no ka hoʻololi ʻana i nā kālepa me nā mea kūʻai aku i ʻae ʻia (mai ka 1 a ʻoi aʻe paha, hoʻomaka ka wai o nā helu mai kahi kokoke i ka helu awa nui).
Ke hoʻohana nei i ka Cage Class
papa hīnaʻi.Wai( cage_name="", pagesize=0, numpages=0, maxstrlen=0, server_ip={}, kali=0, awake=False, cache_file="" )
Hana ʻia nā mea mai kēia papa e launa pū me nā kikowaena faila a loaʻa ka hoʻomanaʻo hoʻomanaʻo.
kiko'î
- cage_name(p) - inoa kūlana o ka mea, i hoʻohana ʻia e ʻike i nā mea kūʻai aku ma ka ʻaoʻao kikowaena
- nui ʻaoʻao(INT) — ka nui o hoʻokahi ʻaoʻao o ka hoʻomanaʻo hoʻomanaʻo (ma nā bytes)
- helu helu(INT) — ka helu o nā ʻaoʻao hoʻomanaʻo pale
- maxstrlen(INT) - ka lōʻihi kiʻekiʻe loa o kahi kaula paita i nā hana kākau a heluhelu
- server_ip(dict) - he puke wehewehe ʻōlelo me nā helu wahi o nā kikowaena i hoʻohana ʻia, kahi o ke kī i ka inoa kūlana o ke kikowaena (server id i loko o ka noi), a ʻo ka waiwai he string me ka helu wahi: "ip address: port" a i ʻole "DNS: awa” (ʻo ka hoʻohālikelike ʻana o nā inoa a me nā helu wahi maoli he manawa pōkole, hiki ke hoʻololi ʻia)
- kali(INT) — ka manawa kali no ka pane mai ke kikowaena i ka wā e loaʻa ai nā awa (i kekona)
- e ala(kāleʻa) — hae o ka hana ana o ka mea (wahahee - inā hana ʻia kahi mea hou, oiaio - inā hana ʻia kahi mea mai kahi mea i "holo ʻia" ma mua - me ka hoʻohana ʻana i ka hana "hibernation", False ma ka paʻamau)
- cache_file(p) - inoa faila no ka hibernation
Nā Palapala
Cage.file_create( kikowaena, alahele ) - hana i kahi faila hou
Cage.file_rename( kikowaena, ala, new_name ) - inoa hou i ka faila
Cage.file_remove( kikowaena, alahele) - holoi i kahi faila
Cage.hamama( kikowaena, alahele, mod ) - wehe waihona
Hoʻi mai fchannel helu channel. ʻĀpana mod — ʻo ia ke ʻano o ka wehe ʻana o ka faila: “wm” — kūʻokoʻa (heluhelu/kākau), “rs” — heluhelu wale nō, a kaʻana like wale no ka heluhelu ʻana e nā mea kūʻai aku, "ws" - heluhelu/kākau, a kaʻana wale no ka heluhelu- e nā mea kūʻai aku wale nō.
Cage.kokoke (fchannel) - pani i ka faila
Cage.kakau (fchannel, hoomaka, ikepili ) - e kākau i kahi kaula byte i kahi faila
Cage.heluhelu (fchannel, hoomaka, len_data ) - heluhelu i kahi string byte mai kahi faila
Cage.kau_aoao ( fchannel ) - "hoʻokuʻu" mai ka buffer a i ke kikowaena nā ʻaoʻao āpau o ke kahawai i kuhikuhi ʻia i hoʻololi ʻia. Hoʻohana ʻia ia ma kēlā mau wahi i ka algorithm inā pono ʻoe e hōʻoia i ka mālama kino ʻana o nā hana āpau ma ke kahawai i kahi faila ma ke kikowaena.
Cage.pahu_all () - "hoʻokuʻu" mai ka pale a hiki i ke kikowaena nā ʻaoʻao āpau o nā kahawai āpau no kahi laʻana o ka papa Cage i hoʻololi ʻia. Hoʻohana ʻia inā pono ʻoe e hōʻoia e mālama ʻia nā hana āpau ma nā kahawai āpau ma ke kikowaena.
Source: www.habr.com