Bygg et real-time chat-program med modul og python

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.

1. Scenario

La oss se på et eksempel scenario som vi kan bruke gjennom denne artikkelen når vi bygger applikasjonen:

  1. Alberto vil bruke vår søknad så han åpner den i nettleseren.
  2. Han velger et kallenavn og logger inn for å chatte.
  3. Han skriver noe i tekstområdet og presser Tast inn
  4. Den innkomne teksten sendes til brukerne som for øyeblikket er logget inn i chat-appen.

Som du kan se, er dette et veldig enkelt program som vil dekke alle grunnleggende om et webprogram. La oss fortsette med prosjektdesignen.

2. Forutsetninger

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.

2.1. Python

Du kan ganske enkelt installere Python ved å bare utføre følgende kommando:

sudo apt-get install python-dev build-essential

2.2. pip

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

2.3. Virtualenv

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

2.4. Gunicorn

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.

3. 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;

3.1. Dependensinstallasjon

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

3.2 Prosjektskjelett

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.

3.3 Maler

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. 

4. Løpende prosjekt

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:

5. Distribusjon

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:

  1. Zip ditt prosjekt og last det opp fra modulskjermbildet ditt
  2. Installer Modulus klient og distribuere fra kommandolinjen

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.

6. Konklusjon

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.