WebSocketを使用して#フラスコ
1.概要
flask_sockets、フラスコ-SocketIO:フラスコ用WebSocketを達成するには、2つの方法があります。
flask_sockets:フラスコのWebSocketパッケージの最も原始的な方法、単機能であり、
フラスコ-SocketIO:この実施例は、通信ソケットの基本的な機能を実現するためだけではなく、多くの機能を提供することができますが、それはより完全にするために、インタフェースのフラスコ結合していてもよいです。
2.flask-ソケット実験
2.1環境設定
フラスコ・ソケットのインストールパッケージ、バージョン0.2.1
PIPフラスコ-ソケットをインストール
2.2バックエンド
2.2.1ルート
ルートは二つの部分、ルータのページのバックエンド・スイッチングとルーティングデータのための1つ、およびその他を含みます。
デフhandle_route_websocket_simple(アプリ): app.route @( '/ WS / TEST_1') デフpage_ws_test_1(): リターンrender_template( 'websocket_test.html'、タイトル= "のWebSocketテスト") #のWebSocket デフhandle_route_websocket(app_socket): @app_socket。ルート( '/ WS / TEST_2') DEF page_websocket_test(WS): 今= time.strftime( '%Y-%M-%D-%H-%M-%S'、time.localtime(time.time() )) ws.closedいない間: #回传给clicent メッセージ= ws.receive()#接收到消息 メッセージがNoneではない場合: 印刷( "クライアントは言う(%sの):%s"は%(今、メッセージ)) ws.send(STR( "回执:!已收到消息サーバー- %s"は%になりました)) ws.send(STR(JSON。ダンプclicentする(メッセージ)))#バック 他に: プリント(現在、 "ノー受信")
ルーティングはメソッドを使用して行われる追加、以下の2つの文は、ルートマップの関係を見ています。
#のWebSocket页面
flask_socketsインポートからソケット
app_socket =ソケット(APP)from .routes import handle_route_websocket, handle_route_websocket_simple handle_route_websocket_simple(app) handle_route_websocket(app_socket) print(app_socket.url_map) print(app.url_map)
ルートマッピング関係:
Map([<Rule '/ws/test_2' -> <function handle_route_websocket.<locals>.page_websocket_test at 0x0000009D88A83620>>])
Map([
<Rule '/ws/test_1' (GET, OPTIONS, HEAD) -> page_ws_test_1>,
<Rule '/hello' (GET, OPTIONS, HEAD) ->hello>,
<Rule '/static/<filename>' (GET, OPTIONS, HEAD) -> static>])
サーバを起動2.2.2
パケットへの復帰は、WebSocketをし、HTTP、WSGIを区別する必要があるため。
具体的なルックWebSocketHandler、ここで少し。
DEF run_app_websocket(): app_websocket =てWSGIServer(( '0.0.0.0'、9000)、flask_app、たhandler_class = WebSocketHandler) app_websocket.serve_forever() :もし__name__ == '__main__' パス #run_app() )run_app_websocket(
2.3フロントエンド
<html>
<head>
<meta charset="utf-8" />
<title>websocket 测试</title>
<script src="https://cdn.bootcss.com/jquery/3.2.0/jquery.js">
</script>
<script type="text/javascript">
function WebSocketTest()
{
if ("WebSocket" in window)
{
// alert("您的浏览器支持 WebSocket!");
// 打开一个 web socket
var ws = new WebSocket("ws://localhost:9000/ws/test_2");
ws.onopen = function(){
// Web Socket 已连接上,使用 send() 方法发送数据
ws.send("请发送数据");
$("#r_s").append("数据发送中...<br>")
};
ws.onmessage = function (evt){
var received_msg = evt.data;
$("#r_s").append("server says: "+decodeURI(received_msg)+"<br>")
//ws.send("数据已收到。")
};
ws.onclose = function(){
// 关闭 websocket
ws.send("正在关闭连接...")
$("#r_s").append("连接已关闭...<br>")
};
}
else {
// 浏览器不支持 WebSocket
alert("您的浏览器不支持 WebSocket!");
}
}
</script>
</head>
<body>
<div id="sse">
<a href="javascript:WebSocketTest()">运行 WebSocket</a>
</div>
<div id="r_s">
操作记录:
<br />
</div>
</body>
</html>
3.試験結果
リア:
クライアントは、(2019-09-27-19-54-33)言う:データを送信してください
ページ:
運転実績: データ伝送... サーバー(PIC):領収書:サーバーは、メッセージを受信しました- 2019-09-27-19-54-33! サーバー(PIC)を:0メッセージを。。。 サーバーは述べています:1つのメッセージ。。。 サーバーは言う:第2のメッセージを。。。 サーバーは言う:3メッセージ。。。 サーバーは言う:4つのメッセージを。。。 サーバーは言う:5つのメッセージを。。。 サーバーは言う:6メッセージ。。。 サーバーは言う:7メッセージ。。。 サーバーは言う:8メッセージ。。。 サーバーは言う:9つのメッセージを。。。 接続が閉じられて...