Flask Full-stack + Flask-SocketIO + Nginx + Gunicorn[1/2]
1.入る前に
Flask SocketIOに触れ、Full Stackとして開発され、リアルタイムの公告事項などのアラームを表示してほしいとの研究が始まった.Flashを初めて開発する場合は、Apache 2をリバースエージェントとして使用します.しかし、Apache 2では、WebSocketヘッダのアップグレードを要求するコマンドに関する明確なデータがなく、これらはすべて失敗した.
1.1開発環境の構成と問題
Webソケットについては概念的な理解が乏しいため,HTTPSを用いて接続要求を継続することは問題ないと考えられる.このとき様々な問題が発生し,ストレステストの必要性が最も感じられる.開発環境と問題の内容は以下の通りです.
開発環境
に質問
各
1.2参考資料
Flask SocketIO研究では、主にDocsリクエストとUpgradeパケットの処理の設定を参照し、他の複数のブログ資料を参照した.
Flask-SocketIO Official Docs
Flask-SocketIO
Webソケットとsocket.io
Webソケットとsocket。io - peterkimzz
4つの最新のLet's Encrypt SSL証明書の発行方法をまとめます
最新のLet's Encrypt SSL証明書発行方法4つのまとめ|夢の島
[Nginx]Let's encryptを使用してHTTPSを適用
[Nginx]Let's encryptを使用してHTTPSを適用
RTCSリアルタイムWebサービスの課題
NAVER D2
WebSocketとSocket.io
NAVER D2
2. Socket IO & Web Socket
2.1 Webソケットの概要
Webソケットサービスの開発方法を理解する前に、Webソケットを理解する必要があります.WebソケットはW 3 Cが管理する標準であり、プロトコルはIETF(Internet Engineering Task Force)が管理する.WebソケットはHTTPリクエストと同様に80번 포트를 통해 웹 서버에 연결
,HTTPバージョンは1.1である.ただし、要求ヘッダを表示する場合は、Upgradeヘッダを使用してWebサーバに要求が発行され、クライアントのブラウザでWebソケット機能がサポートされている場合にのみ、機能が正常に提供されます.GET /... HTTP/1.1
Upgrade: WebSocket
Connection: Upgrade
Webソケットを使用する通信方法:PollingとWebSocketについて説明します.
配達方式
クライアントが一定時間ごとにリクエストを送信すると、サーバはすぐに現在のステータスに応答します.この場合、重要なサービスに適していないことをリアルタイムで反映します.サーバに変化がなくても、各リクエストに応答し、不要なトラフィックが発生します.
WebSocketメソッド
Web Socketは、WebサーバとWebブラウザのリアルタイム双方向通信環境を提供するリアルタイム通信技術である.Polingとは異なり、必要に応じて要求を双方向に送信することができ、ステータスのないHTTPに比べてオーバーヘッドが少ないため、非常に役立ちます.
2.2 WebSocketとSocketIOの違い
上記の概念を理解してWebソケットを実装しようとすると,WebソケットとSocket IOの区別が困難になる可能性がある.Webソケット機能を実現するには2つの側面を区別する必要があると思います.そこで、この文章を書くとき、参考にした資料と理解した内容を説明します.
WebSocket
Webソケットは双方向通信プロトコルであり、서로 다른 컴퓨터끼리 소통하기 위한 약속
と理解できる.
GET /... HTTP/1.1
Upgrade: WebSocket
Connection: Upgrade
Socket.io
socket.io
웹 소켓 기술을 활용하는 라이브러리
は双方向通信に不便である.JavascriptやjQueryとの関係は似ていると言え、速度はやや遅いが、より多くの利便性を提供することができる.非
3. Flask SocketIO
Flask-SocketIO
flask socketioモジュールは、Flash内またはFlashを使用してWebソケット通信を実現するライブラリです.そしてSocketioライブラリを使用して実装することで、Webソケット通信機能を実現する上でより高い生産性を提供できます.
3.1 install & Getting Started
フラスコが取り付けられている場合は、以下の追加モジュールを取り付けて実行できます.$ pip3 install flask-socketio
上記のように、Flask SocketIOを簡単に駆動する例を見てみましょう.
Flask-SocketIO
flaskを使用してsocketioを使用する簡単な例を次に示します.しかし,以下のソースコードは簡略化されたコードであり,それだけではうまく動作しにくい.したがって,我々は構造を理解する観点からのみ見る.
init.py
from flask import Flask, render_template
from flask_socketio import SocketIO
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app)
if __name__ == '__main__':
socketio.run(app)
javascript
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.0.1/socket.io.js" integrity="sha512-q/dWJ3kcmjBLU4Qc47E4A9kTB4m3wuTY7vkFJDTZKjTs8jhyGQnaUrxa0Ytd0ssMZhbNua9hE+E7Qv1j+DyZwA==" crossorigin="anonymous"></script>
<script type="text/javascript" charset="utf-8">
var socket = io();
socket.on('connect', function() {
socket.emit('my event', {data: 'I\'m connected!'});
});
</script>
3.2 Flask full stack + Flask SocketIO
flaskをfull stackとして使用する場合、flask socketioを使用する場合、上記の方法には一定の限界がある.flaskを実行するときはsocketio.run(app)
と実行方法は使用できません.また、リバースエージェントを使用するには、create_app()
内で機能を実装する必要があるため、異なる初期化形式を採用する必要がある.そこで、create app()関数内でフラスコとともに初期化する方法について説明します.
FlashでFlash SocketIOを実行する
flask socketioを使用するには、ファイルを次のように分割します.# file : app/sockets/__init__.py
from flask_socketio import SocketIO
socketio = SocketIO()
ここで,重点的に検討する必要がある部分はsocketioである.Init app(app)部分.フラスコを起動すると同時に、app内で初期化する方法としてsocketioを用いることもできる.# file : app/__init__.py
from flask import Flask
from app.sockets import socketio # app/sockets/__init__.py에 선언된 socketio 변수
def create_app():
app = Flask(__name__)
# Socket.IO
socketio.init_app(app) # socketio 변수를 이용하여 app을 초기화
return app
flaskを簡単に実行するには、以下に示すようにrun.py
ファイルを作成します.ただし、Flask SocketIOを正常にテストしたい場合は、以下のコードでテストすることはできません.任意のGuncornやUWSGIなどのライブラリで実行する必要があります.# file : run.py
from app import create_app
app = create_app()
if __name__ == "__main__":
app.run(debug=True,
threaded=True,
host="0.0.0.0",
port=8080)
記事は長くなりますので、Nginx+Guncorn+Flask-SocketIOの構成方法とクライアントの構成、およびFlaskテストコードについては、次の記事で説明します.
Reference
この問題について(Flask Full-stack + Flask-SocketIO + Nginx + Gunicorn[1/2]), 我々は、より多くの情報をここで見つけました
https://velog.io/@kkamikoon/Flask-Full-stack-Flask-SocketIO-Nginx-Gunicorn12
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
$ pip3 install flask-socketio
from flask import Flask, render_template
from flask_socketio import SocketIO
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app)
if __name__ == '__main__':
socketio.run(app)
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.0.1/socket.io.js" integrity="sha512-q/dWJ3kcmjBLU4Qc47E4A9kTB4m3wuTY7vkFJDTZKjTs8jhyGQnaUrxa0Ytd0ssMZhbNua9hE+E7Qv1j+DyZwA==" crossorigin="anonymous"></script>
<script type="text/javascript" charset="utf-8">
var socket = io();
socket.on('connect', function() {
socket.emit('my event', {data: 'I\'m connected!'});
});
</script>
# file : app/sockets/__init__.py
from flask_socketio import SocketIO
socketio = SocketIO()
# file : app/__init__.py
from flask import Flask
from app.sockets import socketio # app/sockets/__init__.py에 선언된 socketio 변수
def create_app():
app = Flask(__name__)
# Socket.IO
socketio.init_app(app) # socketio 변수를 이용하여 app을 초기화
return app
# file : run.py
from app import create_app
app = create_app()
if __name__ == "__main__":
app.run(debug=True,
threaded=True,
host="0.0.0.0",
port=8080)
Reference
この問題について(Flask Full-stack + Flask-SocketIO + Nginx + Gunicorn[1/2]), 我々は、より多くの情報をここで見つけました https://velog.io/@kkamikoon/Flask-Full-stack-Flask-SocketIO-Nginx-Gunicorn12テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol