使用Flask Socket IO在Python中实现WebSocket的Java实现
使用FlaskSocketIO的PythonWebSocket
Flask是构建的python网络框架。它被认为比DjangoWeb框架更具有Python风格,因为在常见情况下,等效的FlaskWeb应用程序更加明确。Flask使用宁静来响应HTTP请求。将WebSocket与Flask结合使用,将使它成为一个实现实时Web应用程序,并通过WebSocket轻松实现双重通信。
简单的“helloworld”应用程序示例
在虚拟环境中安装库,
创建虚拟环境
-bash-4.2$python3-mvenvvenv
源(或激活)虚拟环境
-bash-4.2$sourcevenv/bin/activate
使用pip安装所需的库
(venv)-bash-4.2$pipinstallflask
(venv)–basj-4.2$pipinstallFlask-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());
});
});上面的内容实际上是服务器和客户端之间发送消息的框架。