Manipulācija ar ligzdu, izmantojot Python

Satura rādītājs
kontaktligzdas Tie ir interfeiss, kas ļauj mums sazināties ar diviem vai vairākiem datoriem, izmantojot tīklu. Pateicoties tam, mēs varam izveidot dažāda veida lietojumprogrammas, kas palīdz mums pārsūtīt datus internetā un tādējādi redzēt rezultātus, kādi citādi nebūtu reālā laikā.
Viens no izplatītākajiem ligzdu ieviešanas veidiem ir protokols TCPTas palīdz, ka ar operētājsistēmas atbalstu pārraide caur internetu ir normāla un bez problēmām.
Tā kā mēs zinām mazliet kontaktligzdas pamatjēdzienu, mēs sāksim manipulēt ar to īpašībām, viens no tiem ir gaidīšanas laiks.
Pagaidiet laiku gaidīšanas laiks Tas ļauj mums noteikt, cik daudz laika kontaktligzda var būt uzmanīga, lai saņemtu vai nosūtītu datus, tas ir ļoti svarīgi, jo, ja lietojumprogramma tiek bloķēta, kamēr šis laiks gaida, mēs varam ciest no visas sistēmas palēnināšanās. . Tāpēc mums ir jāzina, kāds ir iepriekš noteiktais gaidīšanas laiks, kā arī jāspēj pašiem noteikt savu ērtību.
Lai to panāktu, mēs varam izmantot vairākas metodes, kas šim nolūkam pastāv standarta bibliotēkā kontaktligzda no Python.
gettimeout ()Pirmā metode ir gettimeout () un, kā norāda nosaukums, tas mums piedāvā sākotnējo kontaktligzdas gaidīšanas laiku, ko mēs nododam kā parametru.
izlīgums ()Otra metode ir izlīgums () un tās funkcionalitāte ir noteikt taimautu attiecīgajai ligzdai, kas izteikta milisekundēs.
Mēs tagad izveidosim nelielu programmu, kas ļaus mums īstenot apgūto, tāpēc vispirms mēs izveidosim kontaktligzdas tipa objektu, kas kalpos kā mūsu testa priekšmets, tāpēc mēs nokārtosim ģimeni un kontaktligzdas tipu konstruktorā, un ar to mēs varam izmantot metodes.
Lai redzētu izmaiņas, kad esam izveidojuši savu ligzdu, mēs izdrukāsim tās gaidīšanas laiku, kuram jābūt nullei, jo tas ir jauns objekts, tad ar metodi izlīgums () Mēs noteiksim jaunu gaidīšanas laiku un beidzot izdrukāsim informāciju, tādējādi apstiprinot, ka viss ir strādājis tā, kā vajadzētu.
Lai to visu sasniegtu, mums ir jānodrošina, ka mums tas ir Python instalēta mūsu sistēmā, tās versijā 2.7, un jums ir teksta redaktors, lai varētu izveidot failus ar programmām, lai gan mēs varam veikt vingrinājumu arī konsolē, tomēr tas ir nedaudz neērtāk un nav noturīgs, kas nozīmē, ka mēs zaudēsim darbu. Apskatīsim šī piemēra avota kodu:
 #! / usr / bin / env python importēšanas ligzda def timeout_socket (): s = socket.socket (socket.AF_INET, socket.SOCK_STREAM) print "Sākotnējais taimauts ir:% s"% s.gettimeout () s. settimeout (100 ) print "Jaunais taimauts ir:% s"% s.gettimeout () if __name__ == '__main__': time_out_socket () 

Mēs to saglabāsim jaunā failā ar nosaukumu socketTimeWait.py un mēs to izpildīsim konsolē, rezultātam vajadzētu būt kaut kas līdzīgs šim:

buferšķīdums Tā ir vēl viena no lietām, kas mums jāņem vērā, strādājot ar kontaktligzdām, jo ​​šī sastāvdaļa norādīs datu apjomu, ko mēs šobrīd varam nosūtīt vairāk bufera Jo lielāks datu apjoms, taču tas nozīmē arī lielāku resursu patēriņu un ilgāku gaidīšanas laiku to pārsūtīšanā. Pretējā gadījumā a zemāks buferis Tas nozīmē lielāku ātrumu, lai gan ierobežo pārsūtāmo datu apjomu, tāpēc šī prasme mums jāapgūst.
setsockopt ()Lai palīdzētu mums manipulēt ar bibliotēku kontaktligzda no Python piedāvā mums metodi setsockopt(), kas mums jāpiemēro ligzdas klases gadījumam. Ja mēs vēlamies mainīt bufera lielumu, mums noteikti ir jāzina ligzdas bufera sākotnējais izmērs, jo mums ir arī metode getockopt () un to izmanto gandrīz tādā pašā veidā kā iepriekš aprakstīto metodi.
Mēs izveidosim nelielu programmu, lai parādītu to, ko esam izskaidrojuši iepriekš, kodā, kuru mēs redzēsim vispirms izveidojiet konstantu pāri ko mēs izmantosim savā programmā un tiksim definēti 4096 kas ir vērtība mūsu izveidotajiem buferiem.
Tad mēs izveidojam ligzdas klases eksemplāru, lai nekavējoties prasītu bufera sākotnējos izmērus, pēc tam tos izdrukātu uz ekrāna.
Visbeidzot, mēs izmantosim metodi setsockopt () Lai iestatītu vēlamo bufera izmēru, izmantojot programmas sākumā definētās konstantes, šī metode saņem trīs parametrus, līmeni, nosaukumu un visbeidzot bufera vērtību.
Apskatīsim kodu, kas palīdz mums precizēt, ko esam izskaidrojuši, mēs to saglabāsim failā ar nosaukumu size_buffer.py:
 #! / usr / bin / env python importēšanas ligzda TAM_BUFFER_SEND = 4096 TAM_BUFFER_RECEPCION = 4096 def manipulate_buffer (): sock = socket.socket (socket.AF_INET, socket.SOCK_STREAM) # Iegūstiet socket sooer sender izmēru. (socket.SOL_SOCKET, socket.SO_SNDBUF) print "Buffer Size [Before]:% d"% Buffer size sock.setsockopt (socket.SOL_TCP, socket.TCP_NODELAY, 1) sock.setsockopt (socket.SOL_SOCKET, socket.SO_FN setsockopt (socket.SOL_SOCKET, socket.SO_RCVBUF, SIZE_BUFFER_RECEPCION) buffersize = sock.getsockopt (socket.SOL_SOCKET, socket.SO_SNDBUF) drukāt "Bufera izmērs [Pēc]:% d"% manipu_ = buffer_buffer = '__ () 

Kad mēs esam uzrakstījuši savu programmu, mēs turpināsim to izpildīt konsolē, un mēs redzēsim, ka mēs iegūstam bufera vērtības pirms un pēc tā lieluma mainīšanas.

Tāpat kā visu veidu programmās, strādājot ar kontaktligzdām, mēs neesam atbrīvoti no dažu kļūdu rašanās, mums jāizvairās no tā, ka šīs kļūdas mūs pārsteidz, jo, ja tās rodas, mūsu lietojumprogramma var darboties neparedzami.
Tāpēc mums jāiemācās rīkoties ar kļūdām, tādā veidā, ja rodas neparedzēta situācija, mūsu programma nemirst, bet paziņo mums, ka kaut kas ir noticis, tādējādi izvairoties no datu bojājumiem vai līdzīgām situācijām, kas ietekmē mūsu programmas stabilitāti.
Kā ar to rīkoties?Mēs to panākam, izmantojot blokus mēģiniet - izņemot kas ļauj mums novērtēt situācijas, kas parasti ietver datus, kurus mēs nevaram kontrolēt, un līdz ar to mēs varam rīkoties scenārijos atbilstoši saņemtajām atbildēm. Ja iekrītam sadaļā izņemot no bloka mēs varam izmantot mūsu instances kļūdas rekvizītu un ar to izdrukāt notikušo un tādējādi uzzināt, kāda bija kļūme.
Nākamajā programmā mēs pārbaudīsim to, ko esam definējuši paskaidrojuma laikā. Pirmkārt, mēs izveidosim bloku, kas kontrolē mūs, ja ligzdas izveidē ir bijusi kļūda vai nē, ar to mēs varam nodrošināt labu mūsu koda sākumu.
Tad mēs novērtēsim mūsu lietojumprogrammas savienojumu ar attālo saimniekdatoru, izmantojot noteiktu portu, un ar kļūdu apstrādi mēs varam definēt pielāgotu ziņojumu. Visbeidzot, mēs izsaucam savu funkciju un ar to mēs izpildīsim aprakstītās darbības.
Apskatīsim šādu kodu, kas mums jāsaglabā failā ar nosaukumu error_socket.py un tad mēs to palaidīsim konsolē:
 #! / usr / bin / env python import sys importēšanas ligzdas resursdators = 'http: //python.orgt' port = '06' def error_handling (): try: s = socket.socket (socket.AF_INET, socket.SOCK_STREAM) izņemot socket.error, e: print "Veidojot ligzdu:% s" radās kļūda% e sys.exit (1) mēģiniet: s.connect ((resursdators, ports)), izņemot socket.gaierror, e: print " savienojuma adresē:% s "% e sys.exit (1), izņemot socket.error, e: print" Savienojuma kļūda:% s "% e sys.exit (1), ja __name__ == '__main__': error_handling () 

Šeit mēs redzam, ka esam izmantojuši bibliotēku sys lai izmantotu metodi Izeja () un aizveriet programmu pēc kļūdas. Mēs arī atzīmējam, ka resursdators ir nepareizs, tāpēc mēs varam piespiest kļūdu un tādējādi redzēt ziņojumu ekrānā. Visbeidzot, mēs atzīmējam, ka mēs izmantojam mainīgo e, lai fiksētu ligzdas kļūdu, un tādējādi mēs varam iegūt patiesu informāciju par notikušo.
AtcerietiesŠeit mums jābūt īpaši uzmanīgiem ar ievilkums no koda atcerieties to Python Neizmantojot breketes, semikoli arī bloku slēgšanas noteikšanai ir atkarīgi tikai no mūsu izmantotajām atstarpēm vai cilnēm, tādēļ, ja mēs to nedarīsim pareizi, mēs redzēsim sintakses kļūdas.
Ir ļoti svarīgi izlasīt Python ligzdas bibliotēka lai jūs varētu atrast vairāk un labākus veidus, kā izmantot savus resursus.
Ar to mēs pabeidzam šo apmācību, mēs esam sapratuši, kā Python ir ļoti viegli saprotami rīki, kas ļauj mums piekļūt pasaulei kontaktligzdasAr to mēs varam sākt programmēt lietojumprogrammas, kas izmanto tīklus reāllaika apstrādes veikšanai, piemēram, informācijas iegūšanai no citām tīkla iekārtām vai pat no interneta.Vai jums patika šī apmācība un palīdzējāt tai?Jūs varat apbalvot autoru, nospiežot šo pogu, lai sniegtu viņam pozitīvu punktu
wave wave wave wave wave