Flask项目(7)

学习目标

1.能够说明实现在线即时通讯的方法
	1.轮询 2.长轮询 3.websocket 4.http/2.0

2.能够说明websocket与http和tcp的关系
	1.websocket和http是应用层协议
	2.tcp是传输层协议
	3.websocket和http是基于tcp.
	4.websocket握手数据用到http协议报文

3.能够知道socketio与websocket的关系
	1.socketio是一个即时通讯框架
	2.socketio封装websocket协议,但是如果客户端或者服务器不支持,就会退化到轮询。
	

4.能够知道socketio服务器选择协程实现的原因
	1.效率更好,性能更好。
	2.可以有更高的并发能力。

5.能够使用eventlet创建socketio服务器

6.能够在socketio服务器中编写事件消息处理函数
	@sio.on('connect')
	@sio.on('disconnect')
	@sio.on('message')
	sio.emit('message', msg, room=sid)
	sio.send(msg, room=sid)
	
7.能够在socketio中使用emit发送事件消息
	sio.emit('message', msg, room=房间名称)
	sio.send()

8.能够说明用户关注消息推送的业务流程

9.能够使用rabbitmq作为消息队列实现用户关注业务的消息推送
	1.web
		app.mgr = socketio.Kombumanager(rabbitmq-url)
		current_app.mgr.emit()
		# 此时发送的数据,放在rabbitmq中
	2.IM
		mgr = socketio.Kombumanater(rabbitmq-url)
		sio = socketio.Server(async_mode='eventlet', client_manager=mgr)

10.能够使用firecamp工具调试socketio服务

1.即时通信简介

  • 目标:了解什么是即时通讯

  • 概念:

    即时通信(Instant Messaging,简称IM)是一种透过网络进行实时通信的系统,允许两人或多人使用网络即时的传递文字消息、文件、语音与视频交流。通常以网站、计算机软件或移动应用程序的方式提供服务。
    
  • 即时通讯软件:

    qq、微信、钉钉、内网通等,这些都是即时通讯软件。
    

2.即时通讯技术

  • 目标:知道实现及时通讯的几种技术手段

  • 1.基于http 1.x 协议,使用轮询的方式。

    普通轮询.
      优点: 通用、简单,不用使用其他额外的技术。
      缺点: 占带宽,占服务器资源(不断建立、断开连接,对服务器都是一种资源开销)
    长轮询
    	优点: 长轮询和短轮询比起来,明显减少了很多不必要的http请求次数,相比之下节约了资源。
    	缺点: 长轮询的缺点在于,连接挂起也会导致资源的浪费。
    
  • 2.基于WebSocket协议,实现实时推送。

  • 3.http/2.0,未来的技术。

  • 备注:

    1.无论是普通轮询还是长连接轮询,都是属于被动的方式。
    2.WebSocket和http/2.0是属于主动推送的方式。
    

3.WebSocket简介

  • 目标:对WebSocket协议有一个基本的认识

  • 诞生

    WebSocket 协议在2008年诞生,2011年成为国际标准。所有浏览器都已经支持了。
    
  • 特点

    1.服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种。
    2.建立在 TCP 协议之上,服务器端的实现比较容易。
    3.与 HTTP 协议有着良好的兼容性。默认端口也是80和443,并且握手阶段采用 HTTP 协议,因此握手时不容易屏蔽,能通过各种 HTTP 代理服务器。
    4.数据格式比较轻量,性能开销小,通信高效。
    5.可以发送文本,也可以发送二进制数据。
    6.没有同源限制,客户端可以与任意服务器通信。
    7.协议标识符是ws(如果加密,则为wss),服务器网址就是 URL。
    

4.WebSocket与tcp和http的关系

  • 目标:对他们三个协议之间的关系,有一个基本的了解。

    1.WebSocket和http都是属于应用层协议,tcp是传输层协议。
    
    2.WebSocket和http都是基于tcp协议的应用层协议。
    
    3.WebSocket协议使用http报文握手,建立WebSocket连接通讯。
    

5.Socket.IO简介

  • 目标:对Socket.IO框架有基本的认识

  • 基本介绍

    Socket.IO拥有众多语言支持的Web即时通讯应用的框架。
    
  • 需要注意的几个问题:

    1.Socket.IO 不等价于 WebSocket, 并不是简单的对WebSocke进行了封装。
    2.如果选择了Socket.IO框架,前后端都要使用。不能单方使用。
    3.Socket.IO框架是基于事件处理的。
    

6.socketio服务器的选择

  • 目标:知道运行socketio服务器的几种方式。

  • 方式1:

    使用多进程多线程模式的WSGI服务器对接
    缺点: 一个进程或者一个线程维护一个客户端连接,太耗服务器资源。效率低,并发低。
    
  • 方式2:

    作为Flask、Django 应用中的一部分
    缺点: 跟方式1一样会遇到同样的问题
    
  • 方式3:

    使用协程的方式运行 (推荐)
    优点: 可以提升即时通信服务器的性能。
    
  • 备注:

    1.协程看上去也是子程序,但执行过程中,在子程序内部可中断,然后转而执行别的子程序,在适当的时候再返回来接着执行。
    2.协程执行效率高。因为子程序切换不是线程切换,而是由程序自身控制,没有线程切换的开销,所以和多线程比,协程的执行效率更高。而且,并发越高,协程的性能优势就越明显。
    

7.socketio的基本使用

  • 安装:

    pip install python-socketio
    
  • 使用协程的方式。

  • 文件: d01_IM_server.py

  • 步骤

  • 1.使用monkey_patch方法改写原来io操作的接口,变成以协程的方式调用

    import eventlet
    # 1.使用monkey_patch方法改写系统io接口,以便以协程的方式调用
    eventlet.monkey_patch()
    import socketio
    import eventlet.wsgi
    
  • 2.使用eventlet(协程)的方式,创建socketio对象

    sio = socketio.Server(async_mode='eventlet') 
    
  • 3.使用sio创建符合WSGI协议的app对象

    app = socketio.Middleware(sio)
    
  • 4.监听消息事件

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值