WebSocketを使用したフラスコ

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つのメッセージを。
接続が閉じられて...

おすすめ

転載: www.cnblogs.com/wodeboke-y/p/11600907.html