WebSocket是啥?

WebSocket是HTML5引入的新的通信协议,主要由Web客户端和服务器实现,当然它也可以在Web之外实现。 
与HTTP连接不同,WebSocket连接是客户端和服务器之间永久的双向通信通道,其中任何一个都可以启动交换。 一旦建立,连接一直有效,直到其中一方断开连接。

flask实现websocket的两种方式

flask 实现websocket有两种方式实现,一种是flask_sockets方式,该方式是flask对websocket的最原始封装,功能较为单一,第二种方式Flask-SocketIO对websocket的封装,该方式所能提供功能较多,不但实现了socket的基本通信功能,也可以结合flask相关接口,使其更加完备,因此网上对该api介绍也较多。

使用Flask-Sockets

服务端

服务端receive()方法,必须接收客户端发送的数据,才能实现两两互相通信。

#!/usr/bin/env python
# encoding: utf-8
"""
@version: v1.0
@author: W_H_J
@license: Apache Licence
@contact: 415900617@qq.com
@software: PyCharm
@file: flaskWebSocket.py
@time: 2019/2/19 10:20
@describe: flask_sockets 实现websocket
"""
import json
import sys
import os
from flask_sockets import Sockets
import time
from gevent import monkey
from flask import Flask
from gevent import pywsgi
from geventwebsocket.handler import WebSocketHandler
sys.path.append(os.path.abspath(os.path.dirname(__file__) + '/' + '..'))
sys.path.append("..")
monkey.patch_all()app = Flask(__name__)
sockets = Sockets(app)
now = time.strftime('%Y-%m-%d-%H-%M-%S', time.localtime(time.time()))@sockets.route('/test')  # 指定路由
def echo_socket(ws):while not ws.closed:ws.send(str("message test!"))  # 回传给clicent""" 服务端必须接收到客户端发的消息才能保持该服务运行,如果ws.receive()没有接收到客户端发送的消息,那么它会关闭与客户端建立的链接底层解释:Read and return a message from the stream. If `None` is returned, thenthe socket is considered closed/errored.所以客户端只建立连接,不与服务端交互通信,则无法实现自由通信状态,之后在客户端代码处会有详细内容。"""message = ws.receive()  # 接收到消息if message is not None:print("%s receive msg==> " % now, str(json.dumps(message)))""" 如果客户端未发送消息给服务端,就调用接收消息方法,则会导致receive()接收消息为空,关闭此次连接 """ws.send(str(json.dumps(message)))  # 回传给clicentelse:print(now, "no receive")@app.route('/')
def hello():return 'Hello World! server start!'if __name__ == "__main__":server = pywsgi.WSGIServer(('0.0.0.0', 5000), app, handler_class=WebSocketHandler)print('server start')server.serve_forever()

 HTML客户端

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="https://cdn.bootcss.com/jquery/3.2.0/jquery.js"></script>
</head>
<body><div id="time" style="width: 300px;height: 50px;background-color: #0C0C0C;color: white;text-align: center;line-height: 50px;margin-left: 40%;font-size: 20px"></div><script>var ws = new WebSocket("ws://127.0.0.1:5000/test");  #连接server--testws.onmessage = function (event) {content = document.createTextNode(event.data); # 接收数据$("#time").html(content);};</script></body>
</html>

 python客户端

#!/usr/bin/env python
# encoding: utf-8
"""
@version: v1.0
@author: W_H_J
@license: Apache Licence
@contact: 415900617@qq.com
@software: PyCharm
@file: flaskclicent.py
@time: 2019/2/19 10:34
@describe: flask_sockets 客户端
"""
import sys
import os
import datetime
sys.path.append(os.path.abspath(os.path.dirname(__file__) + '/' + '..'))
sys.path.append("..")
from websocket import create_connection
# websocket-client
# 通过socket路由访问
now = datetime.datetime.now()
print(now)def send_query_webSocket():ws = create_connection("ws://10.10.20.21:9000/test")result_1 = ws.recv()  # 接收服务端发送的连接成功消息print(result_1)"""上面recv()方法接收服务端 发送的第一条消息:ws.send(str("message test!"))  # 回传给clicent下面再要接收消息,必须先给服务端发送一条消息,不然服务端message = ws.receive() 的receive方法没有收到消息,而这里直接调用rece()方法去接收服务端消息,则会导致服务端关闭此次连接;底层方法介绍:Read and return a message from the stream. If `None` is returned, thenthe socket is considered closed/errored.虽然此次连接关闭了,但是对于客户端来说并不知情,而客户端recv()方法又是一个阻塞方式运行,所以会导致客户端永远阻塞在这里无法关闭,这也是flask_sockets 客户端服务端交互的一个缺点吧。"""ws.send("I am test msg!")result = ws.recv()print(result)ws.close()return Trueif __name__ == '__main__':send_query_webSocket()

python基于flask_sockets实现WebSocket——叁相关推荐

  1. python基于flask_sockets实现WebSocket

    WebSocket是啥? WebSocket是HTML5引入的新的通信协议,主要由Web客户端和服务器实现,当然它也可以在Web之外实现.  与HTTP连接不同,WebSocket连接是客户端和服务器 ...

  2. python基于flask-socketio实现WebSocket消息广播(发布订阅模式)——贰

    场景 在应用中可能有一中场景,客户端A只需要发布消息,另一头多个客户端只需要接收客户端A发过来的消息,即发布订阅模式.也可用于大屏展示端,客户端只负责发布推送内容,广播接收端则进行消息接收.因此在fl ...

  3. 视频教程-基于Java的WebSocket的聊天室-Java

    基于Java的WebSocket的聊天室 多年 Java 企业级应用开发工作经验,曾参与中国人寿.华夏人寿.泰康人寿.信达财险等保险行业内部业务管理系统以及线上在线产品的开发:参与中国人民银行.清华大 ...

  4. Python用tornado的websocket开发聊天室

    Python用tornado的websocket开发聊天室 用tornado开发基于异步websocket聊天室-demo 目录结构 Python包 main.py app/views.py temp ...

  5. Python基于MASK信息抽取ROI子图并构建基于迁移学习(densenet)的图像分类器实战(原始影像和mask文件都是二维的情况)

    Python基于MASK信息抽取ROI子图并构建基于迁移学习(densenet)的图像分类器实战(原始影像和mask文件都是二维的情况) 目录

  6. python基于模型对测试集和训练集的预测概率结果文件可视化模型的校准曲线、多个模型的校准曲线(calibration curve)

    python基于模型对测试集和训练集的预测概率结果文件可视化模型的校准曲线.多个模型的校准曲线(calibration curve) 目录

  7. Python基于MASK信息抽取ROI子图实战:原始影像和mask文件都是二维的情况

    Python基于MASK信息抽取ROI子图实战:原始影像和mask文件都是二维的情况 目录 Python基于MASK信息抽取ROI子图实战:原始影像和mask

  8. Python基于statsmodels包构建多元线性回归模型:模型构建、模型解析、模型推理预测

    Python基于statsmodels包构建多元线性回归模型:模型构建.模型解析.模型推理预测 目录

  9. python基于tpot训练模型并抑制输出stackingestimator、而是输出单模型例如xgboost设置

    python基于tpot训练模型并抑制输出stackingestimator.而是输出单模型例如xgboost设置 目录 python基于tpot训练模型并抑制输出stackingestimat

最新文章

  1. sql 操作字符串备忘(转)
  2. 道县谋定农业创新-李加映:中国农民丰收节交易会产业化
  3. C#实现动态编译代码
  4. LINQ 优点 总结
  5. c语言学生成绩管理系统(顺序表实现)
  6. 算法:线性时间选择(C/C++)
  7. Android中获取视频的第一帧图片的三种方法
  8. *CF1132D.Stressful Training(二分+队列+贪心)
  9. 毕业设计周报(第六周)
  10. 2020年茶艺师(初级)复审考试及茶艺师(初级)模拟试题
  11. SyntaxError: Missing parentheses in call to ‘print‘. Did you mean print(e)?
  12. 从客户端(userName=hr /)中检测到有潜在危险的 Request.Form 值
  13. Eclipse “cannot be resolved to a type”
  14. 浅谈STG游戏的开发(4月8日更新,已补全内容)
  15. ctfshow萌新计划web22
  16. 图像区分平坦区域、边缘、角点区域
  17. css(精灵图和字体图标)
  18. Idea解决项目起不来的三个方法
  19. python编写arcgis脚本教程_ArcGIS二次开发(1)arcpy简介及编写一个自己的脚本
  20. 东南大学计算机2020初试成绩公布,东南大学2020初试考研录取分数线名单

热门文章

  1. 企业招聘面试十大之怪现状
  2. 同步光网络(SONET,Synchronous Optical Networking)简介
  3. python中jieba分词,并输出词云(基础版)
  4. Php扫码签到功能怎么实现,扫码签到常用方法_云分组小程序
  5. 开发质量问题复盘总结-pua性质的标题
  6. openstack 创建虚拟机后,虚拟机启动hang在cpu 检测
  7. moment自定义时间区间
  8. python读取歌词文本,并显示在图片上,制作视频
  9. 询问HTG:升级Xbox 360 HDD,头痛免费的圣诞灯修复和剥离Kindle DRM
  10. TP6 自定义404,错误提示页面