Flask socket io

Tekrar merhaba, aşağıdaki anlatıyı dikkatlice okumanızı rica ediyorum.

Bir Heroku üyeliğiniz olduğunu varsayarak anlatıyorum. Ayrıca aşağıdaki işlemler Ubuntu’da gerçekleştirilmiştir. Ayrıca sisteminizde git'in yüklü olması da gerekiyor.

  1. https://dashboard.heroku.com/apps sayfasına gidince aşağıdaki gibi bir sayfa görmeniz gerekiyor.

  1. Bu ekranın sağ tarafında yer alan New isimli düğmeye tıklayın, sonra da açılan menüden Create new app seçeneğine tıklayın.

  1. Karşınıza aşağıdaki gibi bir ekranın gelmesi gerekiyor.

Bu sayfada yer alan App name kısmına, oluşturacağınız web sitenizin ismini yazın. Choose a region kısmından da bölgeyi Europe olarak seçin. Sonra da Create app düğmesine tıklayın.

  1. Karşınıza aşağıdaki gibi bir sayfanın gelmesi gerekiyor:

Bu sayfada yer alan, Deploy using Heroku Git kısmında önerilen metodları uygulayacağız. Ama şimdilik buna bir ara verelim. Deploy edeceğimiz ve SocketIO kullanılacak olan siteyi tasarlayalım.

  1. HOME dizininde dildeolupbiten isimli bir klasör oluşturuyorum. Ve bu klasörün içinde bir tane sanal ortam oluşturacağım, sanal ortamı etkinleştireceğim ve pip, setuptools ve wheel paketlerini güncelleyeceğim.
mkdir dildeolupbiten
cd dildeolupbiten
python3.8 -m venv venv
source venv/bin/activate
pip3 install --upgrade pip setuptools wheel
  1. Şimdi, bu sanal ortama gerekli kütüphaneleri kuralım:
pip3 install flask flask_socketio eventlet greenlet gunicorn aiohttp
  1. Şimdi de uygulamamızı oluşturalım. Bu uygulama, kendisine bağlanan istemcinin gönderdiği mesajı istemciye geri gönderen bir socket uygulaması olacak. Siz tabi uygulamayı dilediğiniz gibi değiştirebilir, geliştirebilirsiniz.

Kodlar:

from flask import Flask
from flask_socketio import SocketIO, send

app = Flask(__name__)
app.config["SECRET_KEY"] = "secret!"
socketio = SocketIO(app)


@socketio.on('message')
def receive(message):
    send(message)
  1. Şimdi sıra geldi, deploy etme işleminde kullanılacak dosyaları oluşturmaya. Öncelikle venv'e kurulmuş olan kütüphaneler için bir requirements.txt dosyası oluşturmamız gerekiyor.
python3 -m pip freeze > requirements.txt

Oluşan requirements.txt dosyasında şu modüllerin yer aldığını göreceksiniz:

aiohttp==3.6.2
async-timeout==3.0.1
attrs==20.2.0
chardet==3.0.4
click==7.1.2
dnspython==1.16.0
eventlet==0.28.0
Flask==1.1.2
Flask-SocketIO==4.3.1
greenlet==0.4.17
gunicorn==20.0.4
idna==2.10
itsdangerous==1.1.0
Jinja2==2.11.2
MarkupSafe==1.1.1
monotonic==1.5
multidict==4.7.6
pkg-resources==0.0.0
python-engineio==3.13.2
python-socketio==4.6.0
six==1.15.0
Werkzeug==1.0.1
yarl==1.6.0

Bu listeden pkg-resources==0.0.0 satırını silin. Daha önce o paket yüzünden hata almıştım. Oluşan requirements.txt dosyasını app.py'nin yanına koyun.

  1. Web uygulamasının nasıl deploy edileceğini belirlemek için Procfile isimli, uzantısız bir dosya oluşturmamız gerekiyor. İçine de aşağıdakileri yazıyoruz.
web: gunicorn --worker-class eventlet -w 1 app:app

Klasörümüzün şöyle bir ağaç görünümü olmalı:

.
├── app.py
├── Procfile
└── requirements.txt
  1. https://devcenter.heroku.com/articles/heroku-cli sayfasında yer alan Heroku CLI programını bilgisayarımıza indiriyoruz.

  2. app.py'nin yer aldığı dizinde Terminal’i açıyorum. Ve şunları yazıyorum:

heroku login -i

Sizden mail adresinizi ve şifrenizi girmeniz istenecektir. Sonra da sırayla aşağıdaki komutları çalıştırın:

heroku git:remote -a dildeolupbiten
git init
git add *
git commit -m "first commit"
git push heroku master
  1. Kısa bir süre deploy işleminin bitmesini beklemeniz gerekecek. Deploy işleminde hata almadığınızdan eminseniz, web siteniz artık yayındadır.

  2. Test etmek için bir tane istemci oluşturalım ve deploy ettiğimiz web sitesine bağlanmaya çalışalım. Bilgisayarınızda python-socketio kütüphanesinin kurulu olduğundan emin olun.

python3 -m pip install python-socketio

Kodlar:

#!/usr/bin/python3
# -*- coding: utf-8 -*-

import socketio

sio = socketio.Client()
info = None


@sio.event
def message(data):
    global info
    info = data


@sio.event
def disconnect():
    sio.disconnect()


sio.connect('https://dildeolupbiten.herokuapp.com')
sio.emit("message", data=b"hello", callback=disconnect)
sio.wait()

print(info)

Socket sunucunuz doğru çalışıyorsa, sunucunun size b"Hello" byte verisini geri göndermesi ve ekranınıza bu verinin yazdırılmış olması gerekiyor.

Not: https://dildeolupbiten.herokuapp.com az önce deploy edilmiştir. İsteyen arkadaşlar son paylaştığım kodları çalıştırarak, web sitesine gönderdikleri mesajı geri alıp almadıklarını test edebilirler.

Not: URL’ye web tarayıcısını kullanarak bağlanmaya çalışırsanız, 404 hatası alırsınız. Çünkü gösterilebilecek herhangi bir sayfa eklemedim.

2 Beğeni