从支持协议和支持的工作模式来解析【python】web框架第一部分

本文探讨了Python Web框架Django和Tornado的区别,重点分析了它们在支持协议(HTTP和WebSocket)、工作模式(同步阻塞与异步非阻塞)上的差异。详细解释了Django如何通过多线程实现看似非阻塞的效果,而Tornado则内置了对WebSocket的支持。
摘要由CSDN通过智能技术生成

以python web框架里面具有代表性的Django和Tornado为例

web框架从支持协议上可以分为http协议websocket协议

只用单线程,工作模式上分为同步阻塞模式异步非阻塞模式

Tornado包含以上所有的支持协议和工作模式

Django当然支持http协议,也可通过chanels支持websocket协议。是同步阻塞工作模式,不支持异步非阻塞。但实际使用感觉django也是异步非阻塞的,它的实现本质是多线程,和异步非阻塞只是效果一样,但不是一个概念

补充:默认情况下你使用./manage.py runserver会开启多个线程对HTTP请求进行伺服,所以第二个请求进来时虽然第一个请求仍在sleep,但已经新开了一个线程进行响应处理,看起来像是“非阻塞”的工作模式,其实质是多线程而非单线程,想禁用这一行为也已经给出了答案,加上–nothreading参数:./manage.py runserver --nothreading即可。

从支持协议出发:

http协议和websocket的相同点:

两者都是基于TCP协议,在浏览器和服务端都是通过Socket进行通信

不同点:

http协议是一种短连接,在一次请求响应结束之后就断开连接,需要WSGI(Web服务器网关接口,只支持http,不支持websocket)

websocket协议是一种长链接,保持着tcp连接,除了响应客户端请求外,还能主动想客户端发送消息,需要ASGI(异步网关协议接口,支持http和websocket)处理
websocket原理和Django下聊天室的应用,请分别参考:
https://blog.csdn.net/csdniter/article/details/98355667

https://github.com/yueshouhu/personal_talkhome.git

htttp协议在web框架中实现:

http协议基于tcp协议,都通过socket实现,区别在于传输数据的格式的不同
tcp直接传输任意字符串的字节形式
http协议传输数据包括请求头和请求体及格式要求,web框架主要就是用socket,数据格式处理来实现http协议下数据传输,Django和Tornado实现http协议方式相同

websocket协议在web框架中实现:

Tornado:
tornado本身支持websocket

import tornado.websocket
class ChatHandler(tornado.websocket.WebSocketHandler):
    '''websocket请求'''
    def open(self):
        """
        客户端连接成功时,自动执行
        :return: 
        """
        pass
   	def on_message(self, message):
        """
        客户端连发送消息时,自动执行
        :param message: 
        :return: 
        """
        pass
        
   def on_close(self):
	   """
	   客户端关闭连接时,,自动执行
	   :return: 
	   """
	   pass

详情请参考:
https://blog.csdn.net/csdniter/article/details/98505391 用Tornado实现的简易聊天室

Django
Django中要支持websocket协议,需要借助channels(第三方库)或其它
其中的方法功能和tornado相同,只是需要额外的配置和不同的写法

具体请参考
官方文档:https://channels.readthedocs.io/en/latest/tutorial/
在Django下实现的聊天室应用:https://github.com/yueshouhu/personal_talkhome.git

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值