Cuprins
Până când intrăm în lumea procesării multiple, a serverelor și a cererilor variate, trebuie să știm că există diferite tipuri de răspunsuri sau comportamente, sincron si asincron.Prima constă în servirea unei cereri conform unei teorii a cozilor, fifo, lifo etc. Adică, până la terminarea procesului, acesta nu merge la altul, văzând acest comportament, nu ar fi o problemă pentru un program care se ocupă Fire întrucât ar putea genera mai multe Fire pentru fiecare cerere care îndeplinește funcții specifice.
Apoi îl avem pe cel asincron care ne ajută să servim cu un același fir mai multe cereri în funcție de starea lor, astfel încât, dacă mai multe solicitări sunt executate în timp ce una procesează ceva, putem să luăm în considerare următoarea sau poate că nu ar trebui să așteptăm nici măcar o cerere pentru a trimite date către client:
După cum vedem în imagine, se face o simulare a funcționării unui chat unde este revizuită până când există un mesaj de transmis.
Procese de intrare și ieșire asincrone
Când facem o citire asincronă a solicitărilor clientului, nu este necesar să facem citirea completă a mesajului inițial, dar îl putem vedea încetul cu încetul, grație vitezei de procesare.
Pentru lucru asincron în Piton Avem două funcții care ne pot ajuta, una este Selectați iar cealaltă este sondaj, din care acesta din urmă este disponibil numai pentru medii UNIX, deci ar putea fi o condiție să punem o limită dacă vrem să realizăm un program multiplatform, totuși este soluția care se adaptează cel mai bine, așa că trebuie să ținem cont de aceste detalii.
selectați funcția ia 3 secvențe ca argumente necesare, cu un al patrulea argument care este opțional și conține pauză În câteva secunde, secvențele sunt conexiuni pentru care urmează să așteptăm, fiind 3 acestea corespund următoarelor: intrare, ieșire, condiții excepționale (erori, excepții etc.).
Dacă nu specificăm un pauză, functia Selectați va aștepta până când una dintre secvențe este gata de acțiune, altfel dacă specificăm un timeout, blocurile vor aștepta timpul corespunzător. Valorile returnate de funcție reprezintă un subset activ al fiecărei secvențe, de exemplu prima secvență returnată va fi o secvență de intrare în care vom avea ceva de citit.
Să vedem următorul exemplu de cod despre cum să implementați un server folosind selectați funcția:
import socket, selectați s = socket.socket () host = socket.gethostname () port = 1234 s.bind ((host, port)) s.listen (5) intrări = [s] în timp ce True: [b] rs, ws, es = select.select (intrări, [], []) [/ b] pentru r în rs: dacă r este s: c, addr = s.accept () tipăriți „Am conexiune de la”, adăugați intrări.apend (c) altceva: încercați: date = r.recv (1024) deconectat = nu date, cu excepția socket.error: deconectat = Adevărat dacă este deconectat: tipăriți r.getpeername (), intrări „deconectate”. eliminați (r) altfel: imprimați datele
După cum putem vedea, când apelăm la selectați funcția trecând cele 3 secvențe obligatorii, trecem variabila intrări, care este legat de ceea ce captează serverul în timp ce ascultă pe portul TCP 1234, apoi iterăm pentru a afișa informațiile.
După cum putem vedea, acest aspect al implementării este destul de simplu și limita va fi dată de creativitatea noastră atunci când realizăm programul.V-a plăcut și ați ajutat acest tutorial?Puteți recompensa autorul apăsând acest buton pentru a-i oferi un punct pozitiv