Python实战websocket协议中,我们已经了解了如果使用Python实践基本的websocket协议。

而对于更加常用的场景,我们以Flask框架为例,来演示如何实现更加复杂的应用。

flask_sockets介绍

flask_sockets是一个基于Python3的,用于扩展Flask框架以支持websocket协议的Python第三方库。

安装方式如下:

  1. pip3 install flask_sockets

基于Flask实现的websocket接口

保存如下内容至flask_ws_server.py文件:

  1. # -*- coding: UTF-8 -*-
  2. """
  3. # www.missshi.cn
  4. """
  5. from flask import Flask
  6. from flask_sockets import Sockets
  7. import datetime
  8. import time
  9. app = Flask(__name__)
  10. sockets = Sockets(app)
  11. @sockets.route('/echo')
  12. def echo_socket(ws):
  13. """
  14. # WebSocket接口实现
  15. :param ws:
  16. :return:
  17. """
  18. while not ws.closed:
  19. now = datetime.datetime.now().isoformat() + 'Z'
  20. ws.send(now) #发送数据
  21. time.sleep(1)
  22. @app.route('/')
  23. def hello():
  24. """
  25. # HTTP接口
  26. :return:
  27. """
  28. return 'Hello World!'
  29. if __name__ == "__main__":
  30. from gevent import pywsgi
  31. from geventwebsocket.handler import WebSocketHandler
  32. server = pywsgi.WSGIServer(('', 5000), app, handler_class=WebSocketHandler)
  33. print('server start')
  34. server.serve_forever()

前端Demo访问websocket接口

为了能够更加直观的体验websocket接口的功能,我们需要一个前端页面来进行可视化显示。

保存如下内容为index.html文件:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. <script src="https://cdn.bootcss.com/jquery/3.2.0/jquery.js"></script>
  7. </head>
  8. <body>
  9. <div id="time" style="width: 300px;height: 50px;background-color: #0C0C0C;
  10. color: white;text-align: center;line-height: 50px;margin-left: 40%;font-size: 20px"></div>
  11. <script>
  12. var ws = new WebSocket("ws://127.0.0.1:5000/echo");
  13. ws.onmessage = function (event) {
  14. content = document.createTextNode(event.data);
  15. $("#time").html(content);
  16. };
  17. </script>
  18. </body>
  19. </html>

使用浏览器打开index.html文件即可看到如下内容:

Flask websocket协议实战 - 图1

可以看到,浏览器中的时间每隔1s会进行一次变化。