Flask socket io

pythonany where üzerinde WSGI içingösterilen tüm yolları izledim ancak şurda hata aldm

if __name felan:
app.run(debug = True)

çünkü flaskiı kullanuyordum bunun böle olması gerek
socketio(app,debug = True)

bu seferede socketio objesinin çağrılan bi nesne olmadığını söylüyor.
nasıl yapcam

1 Beğeni

Pythonanywhere socketio desteklemiyordu sanırım. Ben de bu yüzden socketio kullandığım bir web sitesini heroku’da deploy etmiştim.

detaylar msn
ya da iletişime geçeblr myz lütfen eğer vaktn varsa

Tabi, olur.

31 Ocak 2019’a ait bir gönderi.

Hi guys,

Does PythonAnywhere work with flask_socketio?

I’m looking at building some simple webapps following Miguel Grinberg’s tutorial on Flask: https://blog.miguelgrinberg.com/post/easy-websockets-with-flask-and-gevent

Is there any work happening behind the scenes that will introduce this feature? If not, what is a suitable alternative to achieve bi-directional communication between a client and the server?

Thanks,

-Karl

Cevap:

Unfortunately we don’t support it right now. We’re planning to introduce support in the future using extensions to the way always-on tasks work, but we don’t have a timeline right now.

For bi-directional communication right now, the best option is to poll an endpoint on your website from JavaScript.

ben nasl deploy edceğime dyom
biraz bilgszm bu konuda

Tamam müsait olduğumda size yardımcı olmaya çalışırım. Şu an pek müsait değilim ama.

1 Beğeni

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

5.adımı anlamadm gerisi ok ayrıca şimdiden teşekkürler

Aşağıdaki komut, dildeolupbiten isimli bir klasör oluşturur.

mkdir dildeolupbiten

Aşağıdaki komut ile dildeolupbiten dizinine gideriz.

cd dildeolupbiten

Aşağıdaki komut ile venv isminde, yorumlayıcısı python3.8 olan bir tane sanal ortam oluştururuz.

python3.8 -m venv venv

Aşağıdaki komut ile oluşturduğumuz sanal ortamı etkinleştiririz.

source venv/bin/activate

Aşağıdaki komut ile de pip, setuptools ve wheel paketlerini güncelleriz.

pip3 install --upgrade pip setuptools wheel

bunları kendi terminalimden mi yapyom

Evet, bilgisayarınızdaki terminali kullanarak yapacaksınız.

souce tanmlı değil diyor
windowstan ubuntuya mı geçmelym

Windows’ta venv'i etkinleştirme yöntemi biraz daha farklı. activate.bat dosyasını çalıştırmanız gerekiyor. Şöyle etkinleştiriliyordu herhalde:

venv/Scripts/activate.bat

olmadı ama daha da yorulma
bi şekilde ubuntudan yaparm
ayrıca çok teşekkür ederm yoksa napardm

Ya, activate ya da activate.bat'ı çalıştırmanız lazım. Zor bir şey değil.

Gerçi burda da benim söylediğimin aynısı tarif ediliyor, bir şeyi eksik yapıyor olabilir misiniz? Mesela virtualenv yüklenmemiş olabilir mi?

tutorial-env\Scripts\activate.bat
1 Beğeni

öle gözükyo çünkü sistem belirtilen yolu bulamyor dyor

Tamam o zaman şu komut ile yükleyin önce, sonra işlemleri baştan yapın.

pip install virtualenv

Eğer Ubuntu’ya venv yüklemek isterseniz, şöyle yükleyin:

sudo apt-get install python3-venv

aynı hata instaya geçsek olmaz mı tabii vaktn boşsa
belirtilen yol bulunamadı

Instagram hesabım yok.

Aynı hata nedir? pip ile yüklediniz mi? Bir hata alıyorsanız, hatanın çıktısını ya metin olarak, ya da ekran görüntüsü olarak paylaşın size zahmet. Bir de hangi adımları izlediniz, onları da bir liste şeklinde paylaşırsanız, hata almanıza sebep olan kısımları daha rahat bulabiliriz.

1 Beğeni

pip ile yükledm ardından
tutorial-env\Scripts\activate.bat
bu yazıyı yazınca sistem belirtilen yolu bulamadı diyor