Først og fremst, la meg vise deg det endelige utseendet på chatprogrammet som vi vil fullføre innen utgangen av denne artikkelen.
Vi vil implementere applikasjonen med Flask, Gunicorn for frittstående WSGI-applikasjon, og Flask-SocketIO for sanntids kommunikasjon.
La oss se på et eksempel scenario som vi kan bruke gjennom denne artikkelen når vi bygger applikasjonen:
Som du kan se, er dette et veldig enkelt program som vil dekke alle grunnleggende om et webprogram. La oss fortsette med prosjektdesignen.
Før vi fortsetter å implementere prosjektet, må vi gjennomgå noen nødvendige avhengigheter og biblioteker. Jeg vil utføre installasjonsprosessen i Ubuntu for å gjøre installasjonen mye enklere.
Du kan ganske enkelt installere Python ved å bare utføre følgende kommando:
sudo apt-get install python-dev build-essential
pip er et pakkehåndteringssystem som brukes til å installere og administrere programvarepakker skrevet i Python. Vi vil bruke dette til å installere Python-pakker for vår søknad. Du kan installere pip ved å utføre følgende kommando:
sudo apt-get install python-pip
Dette verktøyet gjør det mulig å lage et isolert Python-miljø. Dette betyr at du kan bytte kontekst til miljø som har Python-relaterte egenskaper og bytte tilbake til ditt normale miljø hvis du ikke har Python-utvikling. Du kan installere Virtualenv ved å utføre følgende kommando:
sudo pip installere virtualenv
Gunicorn står for Grønn enhjørning og det er en Python WSGI (Web Server Gateway Jegnterface) HTTP server for UNIX. Gunicorn fungerer som et grensesnitt mellom webserveren og Python-applikasjonen. Vi vil bruke dette til å kjøre vår Flask-applikasjon som frittstående WSGI-program. Vi må bruke [email protected]
fordi nyere versjoner har noen problemer som må løses.
sudo pip installasjon gunicorn == 18.0
Vi er ferdige med installasjonsdelen. La oss fortsette med prosjektoppsett.
Lag en prosjektkatalog som du vil;
mkdir realtimepythonchat
Gå til den nyopprettede katalogen og opprett et virtuelt miljø for Python-utvikling som denne:
virtualenv realtimepythonchat_env
Du kan endre navnet på miljøet i henhold til dine behov. Virtuelt miljø er opprettet, men er ikke aktivert enda. Hvis du kjører følgende kommando;
kilde realtimepythonchat_env / bin / aktiver
Ditt virtuelle virtuelle Python-miljø vil bli aktivert, og vi er klare til å installere krav i dette virtuelle miljøet. For å være sikker på om virtuelt miljø, kan du sjekke kommandolinjen din starter med virtuelt miljønavn i parentes, og du vil se følgende;
Vi må installere noen avhengige biblioteker for vårt prosjekt. Opprett en fil som heter requirements.txt
i rotkatalogen av prosjektet ditt og sett følgende innhold inne i filen:
Flask == 0.10.1 Flask-SocketIO Jinja2 == 2.7.2 MarkupSafe == 0,18 Werkzeug == 0,9.4 Gevent == 1.0 Gevent-socketio == 0,3 Gevent-websocket == 0,9.2 Greenlet == 0,4. 2 sunnere == 0,23 ujson == 1,33
Disse avhengighetene vil hjelpe oss med å skape en sanntids webapplikasjon. La oss nå installere avhengigheter med følgende kommando
pip installasjon -r krav.txt
Så langt har vi opprettet et prosjekt og installert nødvendig programvare. La oss nå legge til prosjektspesifikke filer.
Legg til en fil som heter server.py
og legg inn følgende innhold i det:
fra importert monkey monkey.patch_all () fra kolbe import Flask, render_template, økt, forespørsel fra flask.ext.socketio import SocketIO, send ut, join_room app = Flask (__ name__) app.debug = Sann app.config ['SECRET_KEY'] = 'nuttertools' socketio = SocketIO (app) @ app.route ('/') def chat (): return render_template ('chat.html') @ app.route ('/ logg inn') def login (): return render_template ('login.html') @ socketio.on ('message', namespace = "/ chat") def chat_message (melding): emit ('message', 'data': melding ['data'], broadcast = True) @ socketio.on ('connect', namespace = "/ chat") def test_connect (): emit ('mitt svar', 'data': 'Connected', 'count': 0) hvis __name__ == '__main__': socketio.run (app)
Dette er et enkelt Flask-program som går gjennom Flask-SocketIO-modulen. Den første og andre ruten er for å gjøre hovedsiden og innloggingssiden. Den tredje ruten er for å håndtere budskap
hendelse på chatte
kanal.
Når klienten sender en melding til dette sluttpunktet, blir det sendt til de tilkoblede klientene. Dette gjøres av avgir ()
kommando. Den første parameteren er nyttelastet for meldingen, og den andre er for innstilling av sendingsverdi. Hvis det er sant, vil meldingen bli sendt til klientene. Fjerde ruteren er for enkel ACK melding for klientsiden for å sikre at klienten er koblet til kontakten.
Vi har to sider - chat.html
og login.html.
Du kan se innholdet i login.html
under:
Velg et kallenavn for å skrive inn chat
Dette er et enkelt påloggingssystem som inneholder brukerinformasjon lagret i informasjonskapsel. Når du velger et kallenavn og fortsetter, blir kallenavnet ditt lagret i informasjonskapselen, og du blir omdirigert til chat siden. La oss ta en titt på chat.html
.
Realtime Chat Application med flaske, SocketIO
Chat historie
Som vi allerede har sagt, kan klientsiden bruke SocketIO JavaScript implementering på fronten. Det nødvendige klientsidebiblioteket hentes fra CDN. Faktisk hentes alle CSS- og JavaSCript-filene fra en CDN for å gjøre programmet raskere og redusere prosjektstørrelsen. Du kan klone dette prosjektet og kjøre det lett på din lokale datamaskin.
Når du går til chat siden etter vellykket pålogging, vil informasjonskapsel bli sjekket for å se om brukeren er logget inn eller ikke. Hvis ikke, blir brukeren omdirigert til innloggingssiden igjen. Hvis du lykkes med å gå til chat siden, vil det være en stikkontakt mellom klient og server. SocketIO brukes på klientsiden, og server siden har allerede blitt implementert i over seksjoner. Når brukeren klikker på Tast inn tast eller trykk på Tast inn knappen, vil teksten som er skrevet i meldingsområdet være avgir ()
til server-siden. Meldingen vil bli håndtert på server-siden og vil bli sendt til de tilkoblede klientene via hte chatte
kanal.
Vi vil drive dette prosjektet som frittstående WSGI-program. For å gjøre dette kan du bruke følgende kommando:
gunicorn - arbeider-klasse socketio.sgunicorn.GeventSocketIOWorker server: app
Vi løper gunicorn
kommandoen med to argumenter. Den første er arbeiderklassen, og den kommer fra gevent-socketio
. Den andre er programnavnet med modulen. Her er modulen server.py
og applikasjonsnavnet er app (som er på den åttende linjen i server.py
). Når du kjører over kommandoen, ser du utgang slik:
Når du kom til http://127.0.0.1:8000
, du vil se følgende skjermbilde:
Vi vil bruke Modulus for vårt distribusjonsmiljø. Først og fremst opprett en konto på Modulus og gå til Dashboard for å opprette et nytt prosjekt. Fyll ut prosjektnavn og velg Python boks fra prosjekttyper og klikk SKAP PROJEKT.
Etter en vellykket kontoopprettelse kan vi fortsette distribusjonen. Du kan gjøre distribusjon til modul på to måter:
Jeg vil bruke kommandolinjeutplassering for dette prosjektet. Først av alt, installer Node.js på datamaskinen din.
Når vi starter distribusjonen til Modulus, vil Modulus utføre følgende kommando på deres side:
pip installasjon -r krav.txt
Vi har allerede krevd avhengighetsfil - requirements.txt
og så vil det utføre følgende for å starte distribuert prosjekt:
./manage.py migrere
Vi må imidlertid overstyre denne kommandoen for å gjøre søknaden oppe. Opprett en fil som heter app.json
og sett følgende kommando inne fil:
"scripts": "start": "gunicorn -b unix: /mnt/home/app.sock-worker-class socketio.sgunicorn.GeventSocketIOWorker server: app"
Nå er vi klare til å laste filen til Modulus. Åpne en kommandolinjekonsoll og utfør følgende kommando.
npm installer -g modulus
Du er klar til å bruke Modulus CLI, kjør følgende kommando til login modul.
modul innlogging
Du vil bli bedt om ditt brukernavn / e-post og passord. Skriv inn nødvendige legitimasjon og det er på tide å distribuere. Gå til prosjektkatalogen din og kjør følgende kommando.
moduler distribuere -p "prosjektets navn"
Over kommandoen vil distribuere nåværende prosjekt til modulen du har opprettet før. Ikke glem å bytte prosjektnavn med den du har opprettet før. Hvis alt er bra, vil du se en suksessmelding i konsollen, og teste søknaden din ved å følge nettadressen som er oppgitt i den vellykkede meldingen i konsollen.
Hovedformålet med denne opplæringen var å vise deg hvordan du oppretter et sanntids chatprogram med Flask og SocketIO. Vi har brukt Modulus for PaaS-leverandøren, og det har veldig enkle trinn for å distribuere søknaden din til produksjonsmiljøet.