使用Flask Socket IO在Python中实现WebSocket的Java实现

使用Flask Socket IO的Python WebSocket

Flask是构建的python网络框架。它被认为比Django Web框架更具有Python风格,因为在常见情况下,等效的Flask Web应用程序更加明确。Flask使用宁静来响应HTTP请求。将WebSocket与Flask结合使用将使它成为一个实现实时Web应用程序,并通过WebSocket轻松实现双重通信。

简单的“ hello world”应用程序示例

在虚拟环境中安装库,

  • 创建虚拟环境
    -bash-4.2$python3 -m venv venv

  • 源(或激活)虚拟环境
    -bash-4.2$source venv/bin/activate

    使用pip安装所需的库

  • (venv)-bash-4.2 $pip install flask

  • (venv)–basj-4.2 $pip install Flask-SocketIO

服务器代码示例

from flask import Flask

app = Flask(__name__)

@app.route('/', methods=['GET'])
def hello_world():
	return "Hello World"

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5005)

执行代码

    (venv) -bash-4.2$ python3 hello_world_flask.py
    * Serving Flask app "hello_world_flask" (lazy loading)
    * Environment: production
      WARNING: Do not use the development server in a production environment.
      Use a production WSGI server instead.
    * Debug mode: off
    * Running on http://0.0.0.0:5005/ (Press CTRL+C to quit)

要测试该应用程序,请使用浏览器并将URL作为'http:// localhost:5005 /'或CURL命令提供

    -bash-4.2$ curl http://localhost:5005/
    Hello World
    -bash-4.2$

让Flask与WebSockets一起使用

我们将使用socket.io和相关的Flask插件。Socket-IO是一个出色的引擎,它允许基于事件的双向通信。对于socket-io通信,“事件”由服务器或连接的客户端触发,并且相应的回调函数设置为在检测到事件时执行。

使用以下代码在Flask中非常简单地实现事件触发器或绑定事件回调的实现。

from flask import Flask, render_template
from flask_socketio import SocketIO, emit

app = Flask(__name__)
app.config['SECRET_KEY'] = 'include_help!'
socketio = SocketIO(app)

@socketio.on('my event', namespace='/my_namespace')
# 当一个事件被调用时,此方法被调用 
# 触发了“我的事件”	
def test_message(message):
    # 这会触发名为“我说”的新事件
	emit('i said ', {'data': message['data']})

if __name__ == '__main__':
    socketio.run(app)

在客户端,使用带有JQuery的少量JavaScript来处理传入和传出的触发事件。

$(document).ready(function() {
    // 使用“ / my_namespace”命名空间。"/my_namespace" namespace.
    namespace = '/my_namespace';
	
    // 连接到Socket.IO服务器。
    // 连接网址具有以下格式, 
	// 相对于当前页面:
    // http[s]://<domain>:<port>[/<namespace>]
    var socket = io(namespace);
    
	// 当与
    // 服务器建立。
    socket.on('connect', function() {
        socket.emit('my_event', {
            data: 'I\'m connected!'
        });
    });
    
	// 服务器发送的数据的事件处理程序。
    // 每当服务器发出数据时,都会调用回调函数
    //给客户。然后将数据显示在“已接收”"Received"
    // 页面的部分。
    socket.on('i said', function(msg) {
        $('#log').append('<br>' + $('<div/>').text('Received #'+ msg.count +':'+ msg.data).html());
    });
});

上面的内容实际上是服务器和客户端之间发送消息的框架。