python socketio例子_Flask-SocketIO服务端安装及使用代码示例
安装flask-sockets很容易:
pip install flask-socketio
注意flask-socketio依赖gevent库,目前它仅可以在python2上运行(译者注:python3.6测试也可以)。gevent很快也会对python3支持。
下面是一个flask-socketio在flask应用上的实现例子:
from flask import flask, request, jsonify,render_template
from flask_socketio import socketio, emit
app = flask(__name__)
app.config['secret_key'] = 'secret!'
socketio = socketio(app)
@app.route('/')
def index():
return render_template('test.html')
#触发事件my event:回复只发送此连接
@socketio.on('my_event', namespace='/chat')
def test_message(message):
print(message)
emit('my_response', {'data': message['data']})
#触发事件my broadcast event::回复所有链接(广播)
@socketio.on('my_broadcast event', namespace='/chat')
def test_message(message):
print(message)
emit('my_response', {'data': message['data']}, broadcast=true)
##################################################################
#自动连接和自动断开触发
@socketio.on('connect', namespace='/chat')
def test_connect():
print("连接到来")
emit('my_response', {'data': 'connected'})
@socketio.on('disconnect', namespace='/chat')
def test_disconnect():
print("连接断开")
print('client disconnected')
if __name__ == '__main__':
socketio.run(app,host='0.0.0.0',port=8200,debug=true)
对应的test.html,注意一个问题:flask是从与启动文件同级的templates查找模板的。
test.html
官方完整示例
#!/usr/bin/env python
from threading import lock
from flask import flask, render_template, session, request, \
copy_current_request_context
from flask_socketio import socketio, emit, join_room, leave_room, \
close_room, rooms, disconnect
# set this variable to "threading", "eventlet" or "gevent" to test the
# different async modes, or leave it set to none for the application to choose
# the best option based on installed packages.
async_mode = none
app = flask(__name__)
app.config['secret_key'] = 'secret!'
socketio = socketio(app, async_mode=async_mode)
thread = none
thread_lock = lock()
def background_thread():
"""example of how to send server generated events to clients."""
count = 0
while true:
socketio.sleep(100)
count += 1
socketio.emit('my_response',
{'data': 'server generated event', 'count': count},
namespace='/test')
@app.route('/')
def index():
return render_template('test1.html', async_mode=socketio.async_mode)
@socketio.on('my_event', namespace='/test')
def mtest_message(message):
print(message)
session['receive_count'] = session.get('receive_count', 0) + 1
# print(message)
# print(message['data'])
emit('my_response',
{'data': message['data'], 'count': session['receive_count']})
@socketio.on('my_broadcast_event', namespace='/test')
def mtest_broadcast_message(message):
print(message)
session['receive_count'] = session.get('receive_count', 0) + 1
emit('my_response',
{'data': message['data'], 'count': session['receive_count']},
broadcast=true)
@socketio.on('join', namespace='/test')
def join(message):
print(message)
join_room(message['room'])
session['receive_count'] = session.get('receive_count', 0) + 1
emit('my_response',
{'data': 'in rooms: ' + ', '.join(rooms()),
'count': session['receive_count']})
@socketio.on('leave', namespace='/test')
def leave(message):
print(message)
leave_room(message['room'])
session['receive_count'] = session.get('receive_count', 0) + 1
emit('my_response',
{'data': 'in rooms: ' + ', '.join(rooms()),
'count': session['receive_count']})
@socketio.on('close_room', namespace='/test')
def close(message):
session['receive_count'] = session.get('receive_count', 0) + 1
emit('my_response', {'data': 'room ' + message['room'] + ' is closing.',
'count': session['receive_count']},
room=message['room'])
close_room(message['room'])
@socketio.on('my_room_event', namespace='/test')
def send_room_message(message):
session['receive_count'] = session.get('receive_count', 0) + 1
emit('my_response',
{'data': message['data'], 'count': session['receive_count']},
room=message['room'])
##################################################################
#自动连接和自动断开触发
@socketio.on('connect', namespace='/test')
def test_connect():
print("连接到来")
emit('my response', {'data': 'connected'})
@socketio.on('disconnect', namespace='/test')
def test_disconnect():
print("连接断开")
print('client disconnected')
if __name__ == '__main__':
socketio.run(app, debug=true,port= 8200)
test1.html
flask-socketio test
$(document).ready(function(){
var socket = io.connect('http://' + document.domain + ':' + location.port + '/test');
socket.on('my_response', function(msg) {
$('#log').append('
received: ' + msg.data + '
');
});
$('form#emit').submit(function(event) {
socket.emit('my_event', {data: $('#emit_data').val()});
return false;
});
$('form#broadcast').submit(function(event) {
socket.emit('my_broadcast_event', {data: $('#broadcast_data').val()});
return false;
});
$('form#join').submit(function(event) {
socket.emit('join', {room: $('#join_room').val()});
return false;
});
$('form#leave').submit(function(event) {
socket.emit('leave', {room: $('#leave_room').val()});
return false;
});
$('form#send_room').submit(function(event) {
socket.emit('my_room_event', {room: $('#room_name').val(), data: $('#room_data').val()});
return false;
});
$('form#close').submit(function(event) {
socket.emit('close_room', {room: $('#close_room').val()});
return false;
});
$('form#disconnect').submit(function(event) {
socket.emit('disconnect_request');
return false;
});
});
flask-socketio test
async mode is: {{ async_mode }}
average ping/pong latency: ms
send:
receive:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持萬仟网。
希望与广大网友互动??
点此进行留言吧!
python socketio例子_Flask-SocketIO服务端安装及使用代码示例相关推荐
- Python tcp编程,TCP服务端和TCP客户端代码编写
Python网络编程 两种模式: 一种tcp可靠连接,能够保证数据不丢失 一种udp 不关心数据是否会丢失,在乎传输效率 TCP编程 一点:服务端 二点:客户端 客户端如何连接服务端,保证传输的数据可 ...
- NFS介绍,NFS服务端安装配置,NFS配置选项
2019独角兽企业重金招聘Python工程师标准>>> NFS介绍: NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网 ...
- Openfire服务端安装和配置
2019独角兽企业重金招聘Python工程师标准>>> 1.服务端程序下载 打开连接:http://www.igniterealtime.org/downloads/index.js ...
- 14.1 NFS介绍 14.2 NFS服务端安装配置 14.3 NFS配置选项
2019独角兽企业重金招聘Python工程师标准>>> 第14章 NFS服务搭建与配置 14.1 NFS介绍 NFS(Network File System)即网络文件系统,是Fre ...
- mysql5.7只安装服务端_Windows Mysql5.7.11 服务端安装详解
MySQL服务端安装过程主要是选择安装类型(自定义.典型和完整版),一般我都会选择自定义主要是为了安装到指定目录上,此过程省略,下面着重记录配置过程. 1.配置my.ini文件 在解压的目录下面复制m ...
- php socket 握手,python Socket之客户端和服务端握手详细介绍
这篇文章主要为大家详细介绍了python Socket之客户端和服务端握手,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 简单的学习下利用socket来建立客户端和服务端之间的连接并且发送数据 1 ...
- zabbix php 5.6 安装配置,CentOS 5.6下Zabbix 1.8.5 服务端安装部署
CentOS 5.6下Zabbix 1.8.5 服务端安装部署 CentOS 5.6 x86_64 + Zabbix 1.8.5 IP:192.168.88.130 一.安装LAMP环境依赖包: # ...
- git的CentOS服务端安装和windows客户端的使用
git的CentOS服务端安装和windows客户端的使用 此教程以 ***vps CentOS 6 x64 的系统为环境,搭建 git 服务端.windows 7 系统为客户端. git客户端 在W ...
- java自动化测试成长日记-之CVS客户端和服务端安装和部署1:CVS服务端的配置和基本使用...
CVS服务端的配置和基本使用 在做java自动化测试集成环境搭建的时候,无论怎样,你都会选择一个源代码管理工具,如:SVN,CVS,VSS等:但如果你使用Eclipse工具,建议你使用CVS源代码管理 ...
最新文章
- tsf php,TSF:腾讯推出的 PHP 协程方案
- 自己编译redhat 9.0内核心得
- 无监督学习:异常检测与剔除(局部异常因子法 SVM异常检测器)
- 【数据结构】ArrayList原理及实现学习总结
- anaconda 安装在c盘_最省心的Python版本和第三方库管理——初探Anaconda
- python夹角余弦雷达图_雷达导论PART-II.1 无线电波与交变电流信号
- dataoutputstream.write 有时无法发送_RTK实操——CORS官方网教您如何解决RTK无法固定的问题...
- transformer学习
- Magento(CE1.X)自带模块解析一
- Python简单的小实验输出对应车站的中文简写(主要是为了解决汉字编码问题)
- 小白学习Python的一点建议
- cookie secure
- 【钉钉考勤打卡】--上传打卡记录
- 初三毕业班主任压力过大割喉自尽
- Exiftool not found metadata operations disabled 索尼相机查如何查快门教程
- python 椭圆曲线_椭圆曲线double和add在python中的实现
- 花粉的基本功效(收藏)
- 癌症有哪些数据集_癌症
- ssh framework
- shell python运维脚本_【Python运维】最简单的Python运维脚本
热门文章
- 【机器学习】笔记内容002:贝叶斯算法(理论+实战)
- Javaweb Listener监听器的简单应用:统计网站在线人数
- 微信小程序开发demo10
- 2018腾讯游戏安全技术竞赛Android 组决赛第一轮
- [论文评析]Densely Connected Convolutional Networks,CVPR,2017
- 安装、配置HCL Domino V11
- 2018华迪杯计算机设计大赛,华迪杯第14届中国大学生计算机设计大赛四川省赛在吉利学院成功举办_四川在线...
- pytorch实现梯度反转层(Gradient Reversal Layer)(正确代码)
- Message的几种简单用法
- [GO] gorm的字段标签