安装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服务端安装及使用代码示例相关推荐

  1. Python tcp编程,TCP服务端和TCP客户端代码编写

    Python网络编程 两种模式: 一种tcp可靠连接,能够保证数据不丢失 一种udp 不关心数据是否会丢失,在乎传输效率 TCP编程 一点:服务端 二点:客户端 客户端如何连接服务端,保证传输的数据可 ...

  2. NFS介绍,NFS服务端安装配置,NFS配置选项

    2019独角兽企业重金招聘Python工程师标准>>> NFS介绍: NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网 ...

  3. Openfire服务端安装和配置

    2019独角兽企业重金招聘Python工程师标准>>> 1.服务端程序下载 打开连接:http://www.igniterealtime.org/downloads/index.js ...

  4. 14.1 NFS介绍 14.2 NFS服务端安装配置 14.3 NFS配置选项

    2019独角兽企业重金招聘Python工程师标准>>> 第14章 NFS服务搭建与配置 14.1 NFS介绍 NFS(Network File System)即网络文件系统,是Fre ...

  5. mysql5.7只安装服务端_Windows Mysql5.7.11 服务端安装详解

    MySQL服务端安装过程主要是选择安装类型(自定义.典型和完整版),一般我都会选择自定义主要是为了安装到指定目录上,此过程省略,下面着重记录配置过程. 1.配置my.ini文件 在解压的目录下面复制m ...

  6. php socket 握手,python Socket之客户端和服务端握手详细介绍

    这篇文章主要为大家详细介绍了python Socket之客户端和服务端握手,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 简单的学习下利用socket来建立客户端和服务端之间的连接并且发送数据 1 ...

  7. 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环境依赖包: # ...

  8. git的CentOS服务端安装和windows客户端的使用

    git的CentOS服务端安装和windows客户端的使用 此教程以 ***vps CentOS 6 x64 的系统为环境,搭建 git 服务端.windows 7 系统为客户端. git客户端 在W ...

  9. java自动化测试成长日记-之CVS客户端和服务端安装和部署1:CVS服务端的配置和基本使用...

    CVS服务端的配置和基本使用 在做java自动化测试集成环境搭建的时候,无论怎样,你都会选择一个源代码管理工具,如:SVN,CVS,VSS等:但如果你使用Eclipse工具,建议你使用CVS源代码管理 ...

最新文章

  1. tsf php,TSF:腾讯推出的 PHP 协程方案
  2. 自己编译redhat 9.0内核心得
  3. 无监督学习:异常检测与剔除(局部异常因子法 SVM异常检测器)
  4. 【数据结构】ArrayList原理及实现学习总结
  5. anaconda 安装在c盘_最省心的Python版本和第三方库管理——初探Anaconda
  6. python夹角余弦雷达图_雷达导论PART-II.1 无线电波与交变电流信号
  7. dataoutputstream.write 有时无法发送_RTK实操——CORS官方网教您如何解决RTK无法固定的问题...
  8. transformer学习
  9. Magento(CE1.X)自带模块解析一
  10. Python简单的小实验输出对应车站的中文简写(主要是为了解决汉字编码问题)
  11. 小白学习Python的一点建议
  12. cookie secure
  13. 【钉钉考勤打卡】--上传打卡记录
  14. 初三毕业班主任压力过大割喉自尽
  15. Exiftool not found metadata operations disabled 索尼相机查如何查快门教程
  16. python 椭圆曲线_椭圆曲线double和add在python中的实现
  17. 花粉的基本功效(收藏)
  18. 癌症有哪些数据集_癌症
  19. ssh framework
  20. shell python运维脚本_【Python运维】最简单的Python运维脚本

热门文章

  1. 【机器学习】笔记内容002:贝叶斯算法(理论+实战)
  2. Javaweb Listener监听器的简单应用:统计网站在线人数
  3. 微信小程序开发demo10
  4. 2018腾讯游戏安全技术竞赛Android 组决赛第一轮
  5. [论文评析]Densely Connected Convolutional Networks,CVPR,2017
  6. 安装、配置HCL Domino V11
  7. 2018华迪杯计算机设计大赛,华迪杯第14届中国大学生计算机设计大赛四川省赛在吉利学院成功举办_四川在线...
  8. pytorch实现梯度反转层(Gradient Reversal Layer)(正确代码)
  9. Message的几种简单用法
  10. [GO] gorm的字段标签