Obsah
The zásuvky Jsou rozhraním, které nám umožňuje komunikovat dva nebo více počítačů prostřednictvím sítě. Díky tomu můžeme vytvářet různé typy aplikací, které nám pomáhají přenášet data přes internet a vidět tak výsledky, které bychom jinak v reálném čase neměli.Jedním z nejběžnějších způsobů implementace soketů je protokol TCPTo pomáhá tomu, že s podporou operačního systému je přenos přes internet normální a bez problémů.
Protože víme něco o základním konceptu toho, co jsou zásuvky, začneme manipulací s jejich charakteristikami, jednou z nich je doba čekání.
Čekací dobaThe čekací doba Umožňuje nám stanovit dobu, po kterou může být zásuvka pozorná pro příjem nebo odesílání dat, což je velmi důležité, protože pokud dojde k zablokování aplikace, zatímco tato doba čeká, můžeme trpět rizikem zpomalení celého systému . Proto potřebujeme mít možnost vědět, jaká je předem stanovená čekací doba, a také abychom si ji mohli pro své pohodlí sami stanovit.
Abychom toho dosáhli, můžeme použít několik metod, které pro tento účel ve standardní knihovně existují zásuvka z Krajta.
gettimeout ()První metoda je gettimeout () a jak naznačuje jeho název, nabízí nám počáteční čekací dobu soketu, který předáváme jako parametr.
osadimeout ()Druhá metoda je osadimeout () a jeho funkcí je stanovit časový limit pro dotyčný soket vyjádřený v milisekundách.
Nyní vytvoříme malý program, který nám umožní uvést do činnosti to, co jsme se naučili, za tímto účelem nejprve vytvoříme objekt typu socket, který bude sloužit jako náš testovací subjekt, za tímto účelem předáme rodinu a typ soketu na konstruktor a s ním můžeme použít metody.
Abychom viděli změny, jakmile jsme vytvořili naši zásuvku, vytiskneme její čekací dobu, která musí být nulová, protože se jedná o nový objekt, pak pomocí metody osadimeout () Stanovíme novou čekací dobu a nakonec informace vytiskneme, čímž potvrdíme, že vše fungovalo tak, jak má.
Abychom toho všeho dosáhli, musíme zajistit, že máme Krajta nainstalován v našem systému, ve své verzi 2.7, a mít textový editor, aby mohl vytvářet soubory s programy, i když cvičení můžeme provádět i na konzole, ale je to trochu nepohodlnější a není to trvalé, což znamená, že bychom přišli o práci. Podívejme se na zdrojový kód pro tento příklad:
#! / usr / bin / env python import socket def timeout_socket (): s = socket.socket (socket.AF_INET, socket.SOCK_STREAM) print "Počáteční časový limit je:% s"% s.gettimeout () s. osadimeout (100 ) tisk "Nový časový limit je:% s"% s.gettimeout () pokud __name__ == '__main__': time_out_socket ()
Uložíme to do nového souboru s názvem socketTimeWait.py a provedeme to v konzole, výsledek by měl být podobný následujícímu:
The vyrovnávací paměť Je to další z věcí, které musíme vzít v úvahu při práci se zásuvkami, protože tato komponenta bude udávat množství dat, které můžeme v tuto chvíli přenášet, aby více vyrovnávací paměti Čím větší je množství dat, tím to však také znamená větší spotřebu zdrojů a delší čekací dobu při jejich přenosu. Jinak a nižší vyrovnávací paměť Představuje větší rychlost, i když omezuje množství přenášených dat, a proto je to dovednost, kterou musíme zvládnout.
setsockopt ()Pomáhá nám manipulovat s vyrovnávací pamětí knihovny zásuvka z Krajta nabízí nám metodu setsockopt(), kterou musíme aplikovat na instanci třídy socket. Pokud chceme změnit velikost vyrovnávací paměti, určitě musíme nejprve znát původní velikost soketové vyrovnávací paměti, k tomu máme také metodu getsockopt () a používá se v podstatě stejným způsobem jako metoda, kterou jsme popsali výše.
Chystáme se vytvořit malý program, který předvede, co jsme vysvětlili dříve, v kódu, který uvidíme, na který se nejprve podíváme vytvořit pár konstant které použijeme v našem programu a bude jim definováno 4096 což je hodnota pro velikost vyrovnávacích pamětí, které vytvoříme.
Poté vytvoříme instanci třídy soketu, abychom okamžitě požádali o počáteční velikosti vyrovnávací paměti, a poté je vytiskneme na obrazovku.
Nakonec tuto metodu použijeme setsockopt () Chcete -li nastavit požadovanou velikost vyrovnávací paměti pomocí konstant definovaných na začátku programu, tato metoda obdrží tři parametry, úroveň, název a nakonec hodnotu pro vyrovnávací paměť.
Podívejme se na kód, který nám pomáhá určit, co jsme vysvětlili, uložíme jej do souboru s názvem size_buffer.py:
#! / usr / bin / env python import socket TAM_BUFFER_SEND = 4096 TAM_BUFFER_RECEPCION = 4096 def manipulate_buffer (): sock = socket.socket (socket.AF_INET, socket.SOCK_STREAM) # Získejte velikost soketu pro odesílání vyrovnávací paměti sizeBufferopt = sock.get (socket.SOL_SOCKET, socket.SO_SNDBUF) tisk "Velikost vyrovnávací paměti [Před]:% d"% Velikost vyrovnávací paměti sock.setsockopt (socket.SOL_TCP, socket.TCP_NODELAY, 1) sock.setsockopt (socket.SOL_SOCKET, socket.SO_SNDBUFFER_ sock. setsockopt (socket.SOL_SOCKET, socket.SO_RCVBUF, SIZE_BUFFER_RECEPCION) buffersize = sock.getsockopt (socket.SOL_SOCKET, socket.SO_SNDBUF) tisk "Velikost vyrovnávací paměti [po]:% d"% manipulate_buffer_size = '_ = '__ ()
Jakmile napíšeme náš program, přistoupíme k jeho spuštění v konzole a uvidíme, že získáme hodnoty vyrovnávací paměti před a po úpravě její velikosti.
Stejně jako u všech typů programů, ani při práci se zásuvkami nejsme osvobozeni od výskytu některých chyb, musíme se vyvarovat problému, že nás tyto chyby překvapí, protože pokud ano, naše aplikace může fungovat nepředvídatelně.
Proto se musíme naučit zacházet s chybami, tímto způsobem, pokud dojde k neočekávané situaci, náš program nezemře, ale upozorní nás, že se něco stalo, zabráníme tak poškození dat nebo podobným situacím, které ovlivňují stabilitu našeho Programu.
Jak to zvládnout?Toho docílíme pomocí bloků zkuste - kromě které nám umožňují vyhodnotit situace, obecně zahrnující data mimo naši kontrolu, a díky tomu můžeme jednat ve scénářích podle odpovědí, které získáme. Pokud spadneme do sekce až na bloku můžeme použít vlastnost chyby naší instance a spolu s ní vytisknout, co se stalo, a tak vědět, jaká byla chyba.
V následujícím programu si vyzkoušíme, co jsme během vysvětlení definovali. Nejprve vytvoříme blok, který nás ovládá, pokud při vytváření soketu došlo k chybě nebo ne, čímž můžeme zajistit dobrý start našeho kódu.
Poté budeme vyhodnocovat připojení naší aplikace ke vzdálenému hostiteli přes konkrétní port a pomocí zpracování chyb můžeme definovat vlastní zprávu. Nakonec zavoláme naší funkci a spolu s ní provedeme popsané akce.
Podívejme se na následující kód, který musíme uložit do souboru s názvem errors_socket.py a pak to spustíme v konzole:
#! / usr / bin / env python import sys import socket host = 'http: //python.orgt' port = '06' def error_handling (): try: s = socket.socket (socket.AF_INET, socket.SOCK_STREAM) kromě socket.error, e: print "Při vytváření soketu došlo k chybě:% s"% e sys.exit (1) try: s.connect ((host, port)) kromě socket.gaierror, e: print "Chyba v adrese připojení:% s "% e sys.exit (1) kromě socket.error, e: print" Chyba připojení:% s "% e sys.exit (1) pokud __name__ == '__main__': error_handling ()
Zde vidíme, že jsme použili knihovnu sys za účelem použití metody exit () a zavřete program, když dojde k chybě. Všimli jsme si také, že hostitel je nesprávný, proto můžeme vynutit chybu a zobrazit tak zprávu na obrazovce. Nakonec si všimneme, že k zachycení chyby soketu použijeme proměnnou e, čímž můžeme získat skutečný detail toho, co se stalo.
Zapamatovat siZde musíme být obzvláště opatrní s odsazení kódu si to pamatujte Krajta Pokud nepoužíváme závorky, středníky také k definování blokových uzávěrů závisí výhradně na mezerách nebo záložkách, které používáme, takže pokud to neuděláme správně, uvidíme chyby syntaxe.
Je velmi důležité, abychom si přečetli dokumentaci k souboru Knihovna soketu Python abyste mohli najít více a lepších způsobů, jak využít své zdroje.
S tímto dokončujeme tento tutoriál, uvědomili jsme si, jak Krajta má velmi snadno srozumitelné nástroje, které nám umožňují přístup do světa zásuvkyS tímto můžeme začít programovat aplikace, které používají sítě k provádění zpracování v reálném čase, jako je získávání informací z jiných počítačů v síti nebo dokonce z internetu.Líbil se vám tento návod a pomohl mu?Autora můžete odměnit stisknutím tohoto tlačítka, čímž mu dáte kladný bod