flask post json_【python:flask-SocketIO】网络通信框架简单了解
Flask是一个用python开发的网络应用微框架。
http://docs.jinkan.org/docs/flask/docs.jinkan.org
而flask-SocketIO 为flask应用提供了一个客户端与服务器之间低延迟的双向通信。客户端应用可以用Javascript,C++,Java,Swift或者其它任意的编程语言的socketio官方库的客户端去和服务端创建一个永久的连接。
from flask import Flask, render_templatefrom flask_socketio import SocketIOapp = Flask(__name__)app.configp['SECRET_KEY'] = 'secret!'socketio = SocketIO(app)if __name__ == '__main__':socketio.run(app)
这就是一个简单的Flask应用。
Flask大量使用装饰器模式,来将用户应用中的各种函数装入Flask框架中。所以学习之前应当对python的装饰器模式的使用熟练掌握。
例如,下面的装饰器socketio.on()实现对接收到的消息'message'的监听,'message'是用户自定义的一个消息种类的名字。也可以改为其他名字。重点是收发要是同一种消息。同时message是用户自定义的数据类。
@socketio.on('message')
def handle_message(message):print('received message: ' + message)
也可以不使用装饰器语法,而是使用socketio.on_event()代替装饰器来进行消息监听:
def my_function_handler(data):pass
socketio.on_event('my event', my_function_handler, namespace='/test')
后端的flask-socketio的创建和运行方式如下:
from flask import Flask
from flask_socketio import SocketIO,emitapp = Flask(__name__)socketio = SocketIO()
socketio.init_app(app)"""
对app进行一些路由设置
"""
@app.route('/')
def index():return render_template('test.html')"""
对socketio进行一些监听设置
"""if __name__ == '__main__':socketio.run(app,debug=True,host='0.0.0.0',port=5000)#这里就不再用app.run而用socketio.run了。socketio.run的参数和app.run也都差不多
使用@app.route('/')装饰器设置路由,@socketio.on设置消息监听。
命名空间namespace使得客户端可以在一个相同的socket上多路复用几个独立的连接。也就是说,同一个物理机可以开启多个进程并使用同一个socket连接到服务器,只需要指定不同的命名空间即可。
@scoketio.on('my event', namespace='/test')
def handle_my_custom_namespace_event(json):print('received json: ' + str(json))
发送消息:
使用send()和emit()发送消息,它们分别用于无名和命名事件。
@socketio.on('message')
def handle_message(message):send(message, namespace='/chat')@socketio.on('my event')
def handle_my_custom_event(json):emit('my response', json, namespace='/chat')
使用emit时可以指定namespace来指定命名空间。
@socketio.on('my event')
def handle_my_custom_event(json):emit('my response', ('foo', 'bar', json), namespace='/chat')
发送的消息也可以带有参数'foo'和'bar'。
def ack():print 'message was received!'@socketio.on('my event')
def handle_my_custom_event(json):emit('my response', json, callback=ack)
也可以在发送函数emit()等api中使用回调函数。
@socketio.on('my event')
def handle_my_custom_event(data):emit('my response', data, broadcast=True)
加入broadcast=True参数可以使得send()和emit()广播消息,所有客户端都会收到它。若指定命名空间,则只有连接到命名空间的客户端会收到消息。
使用room可以实现“群聊”功能。(略)
from flask_socketio import Namespace, emitclass MyCustomNamespace(Namespace):def on_connect(self):passdef on_disconnect(self):passdef on_my_event(self, data):emit('my_response', data)socketio.on_namespace(MyCustomNamespace('/test'))
使用基于类的命名空间Namespace可以一次性注册消息的监听处理函数,便于管理以及面向对象编程。现在,服务器接收的任何消息都会由on_+消息名为名字的MyCustomNamespace中的成员函数处理。例如my_event消息会由MyCustomNamespace中的on_my_event处理。
socketIO-client是一个基于python实现的socket.io客户端库,这个socket.io原本是一个js的库(flask_socketio也是),github链接:https://github.com/invisibleroads/socketIO-client,它与flask_socketIO的关系是,对于用Flask-SocketIO实现的后端,客户端需要用SocketIO的官方库实现,语言不限。https://flask-socketio.readthedocs.io/en/latest/
大致使用就是这些,现在比较好奇的问题是,收发消息的时候需要考虑tcp的多个包接收处理吗,因为之前在用Python的twisted的时候用datareceived就需要自己对消息做结尾字符,然后作处理,因为twisted的datareceived会在每个tcp包到达的时候进行调用。还有就是socketIO有没有像twisted一样的对于某一个函数执行延时执行的功能,这个功能真的很强大,在差错处理上十分有用。
参考:
https://www.jianshu.com/p/0032daa111a0
https://blog.csdn.net/weixin_36380516/article/details/80418354
https://pycntech.github.io/flask-SocketIO%E5%AE%98%E6%96%B9%E6%96%87%E6%A1%A3%E7%BF%BB%E8%AF%91-%E8%81%AA%E8%81%AA.html
https://juejin.im/post/5bdad42bf265da392a7e2e0e
flask post json_【python:flask-SocketIO】网络通信框架简单了解相关推荐
- flask mysql 1366_2017-11-17 Python Flask Script+mysql环境设置
[1.初级版] flask-scrpit安装. 使用flask-scrpit可以创建命令,并在Flask的应用上下文中执行,因为这样才能对Flask对象进行修改.Flask Script自带了一些默认 ...
- python网络通信框架_【python:flask-SocketIO】网络通信框架简单了解
Flask是一个用python开发的网络应用微框架.http://docs.jinkan.org/docs/flask/docs.jinkan.org 而flask-SocketIO 为flask应 ...
- python:web后台框架简单实现
python:web后台框架 目录 简介:BS开发和http协议 WSGI概述 类flask框架简单实现 response使用及wsgify装饰器 路由 模板原理 jinjia2模板技术 模块化,ja ...
- flask post json_使用Flask构建web项目的代码架构以及技术栈模板(一)
自我简介 无名编码狮,爱好编码,个人blog网站http://www.skj.kim,网站服务器比较辣鸡哈,第一次访问速度比较慢,就用来记录一些CSDN审核不容易通过的博客,底层使用wordpress ...
- python flask oauth_基于python flask详述 OAuth 2.0 的运作流程
OAuth2流程图 OAuth2 对于我来说是一个神秘的东西,我想初步的弄懂中间的整个流程,于是就去google搜索相关的文档资料. 在浏览了参差不齐的各种文章后,简述 OAuth 2.0 的运作流程 ...
- python flask html模板,python flask web开发实战 Jinja2模板
templates/index.html Hello World! templates/user.html Hello, {{ name }}! 渲染模板: from flask import Fla ...
- docker flask mysql_Docker下Python Flask+Redis+MySQL+RQ队列简单配置
本篇博文主要讲解Docker下使用RQ队列的通信配置,主要是网上的部分文章写的不太清楚,特写一篇 作者使用docker-compose.yml文件调度各部分文件Dockerfile,起初是这样写的 v ...
- API接口开发其实特简单,Python Flask Web 框架教程来了
大家好,日常工作中,无论你是数据工程师.数据挖掘工程师,甚至数据分析人员,都不可避免的与他人进行数据交互,API接口提供数据是最常见的形式. 今天我给大家分享 Python Flask Web 框架教 ...
- Python Flask教程
Welcome to Python Flask tutorial. In previous lesson we have learnt about python lambda. Python flas ...
最新文章
- dell笔记本电脑驱动_笔记本电脑摄像头打不开,怎么办?总结经验(基于摄像头本身是完好的)...
- jzoj3914-人品问题【树形dp】
- 论文浅尝 | 神经网络与非神经网络简单知识问答方法的强基线分析
- oracle监听 3个配置文件,Oracle 11g 监听 配置修改 说明
- accept 阻塞_TCP网络编程中connect()、listen()和accept()三者之间的关系
- 了解mysql的undo log
- mapreduce对日志数据上下行流量汇总
- hive sql分页
- 谷歌地图的级别与对应比例尺及分辨率探究
- 通过SAXReader解析XML
- 软件架构设计说明书该怎么写?
- 半导体芯片行业的运作模式(IDM/Fabless/Foundry模式)
- win10查看计算机系统版本,如何查看我的电脑是不是win10 1909版本?
- qt信号阻塞blockSignals的运用
- 从零开始搭建terraria(泰拉瑞亚)服务器
- OM302工业DTU对接亚控kingscada,实现水泵站一体化智慧改革
- (重点)微服务核心研究之--编排
- SSD算法原理与代码(三)
- OFFICE中的VBA库的定义
- IEEE 软件单元测试标准
热门文章
- SAP Spartacus当前产品主数据数据格式的一个例子
- Angular里的消息(Message)显示
- 如何使用SAP Cloud for Customer OData服务创建Lead
- SAP UI5应用访问OData metadata的url和Destination
- why we need getCoreClasses()
- SAP CRM product determination debug
- SAP UI5 Manifest fill logic
- SAP UI5 Logon Handler of Frame
- SAP Fiori :why my filter for category does not work
- IBASE Header change - access sequence