2014-04-16 20 views
28

Şu anda Python'da web desteği desteği araştırıyorum ve tekliflerle biraz karıştırıyorum.Flask'ta Websockets

Bir yandan Flask + gevent kullanmak mümkündür. Öte yandan, uwsgi'nin socket support'u var ve sonunda hem uwsgi and gevent'u hem de bir araya getiren bir uzantı var.

Sadece bunlardan biriyle web yuvalarının uygulanmasında sorun nedir? Onları karıştırarak ne kazanırım?

ekleyerek gevent o uwsgi olmaz dişli ne yapıyor sorusunu

değiştirme?

+0

Kenneth Reitz tarafından "Flask-Sockets" adlı websockets için mükemmel olan bir uzantı var. Buna bir bak. https://github.com/kennethreitz/flask-sockets – codegeek

+1

Teşekkürler, ama aynı zamanda bu karmaşa içinde gevent rolünü bulmakla ilgileniyorum. – ruipacheco

+0

Diyorum ki, bu bir asyncronous. Yani orada tek bir işçi için sadece bir müşteri ile uğraşmak değil. –

cevap

63

Düzenli HTTP isteklerinde, istemci ve sunucu arasındaki bağlantılar kısa ömürlüdür, bir istemci sunucuya bağlanır, bir istek gönderir, yanıtı alır ve sonra bağlantıyı kapatır. Bu modelde sunucu az sayıda çalışanı kullanarak çok sayıda müşteriye hizmet verebilir. Bu durumdaki eşzamanlılık modeli tipik olarak iş parçacığı, işlemlere veya her ikisinin birleşimine dayanır.

Websocket kullandığınızda, sorun daha karmaşıktır, çünkü bir websocket bağlantısı uzun bir süre açık olduğundan, sunucu çok sayıda istemciye hizmet vermek için küçük bir işçi havuzu kullanamaz, her müşterinin kendi özel çalışanı. Konu ve/veya süreç kullanırsanız çok sayıda ileti dizisine sahip olamayacağınız için uygulamanız çok sayıda müşteriyi destekleyecek şekilde ölçeklenmez.

Gevent, resmin içine girdiği yerdir. Gevent, yeşil ipliklere dayalı eşzamanlılık modeline sahiptir. Bu nedenle, ağ geçidi tabanlı bir sunucuyla web bağlantısı bağlantıları sunmak, yeşil alanların hafif doğası nedeniyle daha fazla müşteriyi desteklemenize olanak tanır. UWSGI ile, web prizleriyle kullanmak için eşzamanlılık modelleri arasından seçim yapabilirsiniz ve bu model, gevent'ten alınan greenlet tabanlı modeli içerir. İsterseniz gevent'in web sunucusunu bağımsız olarak da kullanabilirsiniz.

Ancak, notun web soketleri hakkında hiçbir şey bilmediğini unutmayın, bu yalnızca bir sunucudur. Web bağlantısı bağlantılarını kullanmak için websocket sunucusunun bir uygulamasını eklemeniz gerekir.

Web konsollarının kullanımını basitleştiren Flask için iki uzantı vardır. Kenneth Reitz tarafından yapılan Flask-Sockets uzantısı, gevent ve gevent-websocket için bir sarıcıdır. Flask-SocketIO uzantısı (ben yazar olarak utanmaz fiş) sunucu üzerinde gevent ve gevent-socketio, artı istemci üzerinde Socket.IO için bir sarıcı olduğunu. Socket.IO, eğer mevcutsa web soketini kullanabilen, ancak eski tarayıcılarda diğer taşıma mekanizmalarını da kullanabilen daha yüksek seviye soket protokolüdür.

Umarım bu yardımcı olur!

+0

@Miguel - Yönetici kullanıyorsam Socket.IO'yu nasıl çalıştırırım? Reçeteyi yap - socketio.run (app) – moaglee

+0

@ moaglee Sorunu anlamıyorum. Tüm detaylarla ayrı bir soru yazmak ister misiniz? – Miguel

İlgili konular