SocketIO hız ve güvenilirliğe odaklanan gerçek zamanlı, çift yönlü (bidirectional) ve olaya dayalı (event-based) iletişimi sağlar. Her platformda, tarayıcıda veya cihazda çalışabilir. Flask-SocketIO ise Flask tabanlı web uygulamalarında kullanabileceğimiz soketler için oluşturulmuş bir kütüphanedir. Herhangi bir SocketIO istemcisi ile erişilebilir ve kullanılabilir.
İşletim Sistemi
- Ubuntu 18.04
Uygulama Sürümleri
- Python 3.6.7
- pip 19.0.3 from (python 3.6)
Kütüphane Sürümleri
- Flask==1.0.3
- Flask-Cors==3.0.8
- Flask-SocketIO==4.1.0
İlk olarak kütüphanemizin kurulumunu gerçekleştirelim.
Aşağıdaki gibi bir klasör düzeni oluşturalım.
- soket
- templates
- static
- app.py
app.py
dosyamıza ilk olarak kütüphaneleri ekleyelim.
Kütüphaneleri ekledikten sonra soket ve web uygulamamızın çalışabilmesi için gerekli kodları ekleyelim.
Şimdi templates
klasörünün içerisine index.html
dosyası oluşturalım. Bu html dosyasına erişebilmek için gereken flask yönlendirmesini app.py
dosyasına ekleyelim.
HTML dosyamıza socketio ve jquery javascirpt kütüphanelerimizi ekleyelim.
İlk denememiz sokete biri bağlandığında diğer kullanıcıları uyarmak olacak.
app.py
dosyası
index.html
dosyası
Neden Flask-CORS Kullandık?
CORS (Cross-Origin Resource Sharing) teriminin Türkçe karşılığı Kökler Arası Kaynak Paylaşımı demek. CORS hatası ile daha önce karşılaştığım için ekledim. Javascript ile uygulamama istek atarken karşılaştığım bir hatayı çözmek için bu kütüphaneyi kullanmıştım. CORS hakkında detaylı bilgiye Gökhan Şengün’ün bu yazısından ulaşabilirsiniz.
Neden emit() Kullandık?
SocketIO da belirli bir fonksiyona veri göndermek istiyorsak emit()
kullanılır. emit()
fonksiyonun ilk parametresi veriyi göndermek istediğimiz fonksiyonun ismi olmalıdır.
Neden broadcast Kullandık?
broadcast
sokete bağlı olan tüm kullanıcıları/istemcileri bilgilendirmek için kullanılır. broadcast
seçeneği aktif ise gönderende dahil olmak üzere herkes mesajı alır.
Bu yazımı yazarken hem soket programlama öğrenip hem de sizlere anlatmaya çalıştım. Hatalı olduğum kısımları twitter üzerinden bildirmeyi unutmayın.