写点什么

1.Tornado 简介 && 本专栏搭建 tornado 项目简介

作者:孤寒者
  • 2022 年 6 月 10 日
  • 本文字数:1881 字

    阅读完需:约 6 分钟

1.Tornado简介&&本专栏搭建tornado项目简介

一、tornado 简介

  • 【tornado官方中文文档】

  • tornado 是 Python 的 web 框架。

  • tornado 和主流的 web 服务器框架有明显的区别:它是非阻塞式服务器,而且速度非常快,得力于其非阻塞的方式和 epoll 的运用!

  • tornado 可以每秒处理数以千计的连接(号称)!

来讲一讲 tornado 速度为何会非常快?

两个常见的协议:


  1. 网络协议:http 协议:基于网络的超文本传输控制协议。

  2. 通信协议:tcp


上面也说了 tornado 速度快的一大原因是得益于其非阻塞的方式,所以下面就通过这一点来说明:

(1)传统 TCP 客户端及服务器端搭建:

  • 搭建流程图如下:

①传统 TCP 服务器端搭建步骤及代码:

  • 1.创建套接字 socket

  • 2.绑定 IP 和端口号

  • 3.设置接收数

  • 4.处理连接

  • 5.设置接收数据的大小

  • 6.关闭和退出


# -*- coding: utf-8 -*-"""__author__ = 孤寒者"""import socket# 1.服务器对象         socket.AF_INET:使用IPV4;  socket.SOCK_STREAM:使用socket套接字。server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2.绑定IP和端口号server.bind(("127.0.0.1",8080))# 3.监听 设置接收数server.listen(128)print('服务器开启', 8080)# 4.处理连接# accept()理解就是三次握手建立连接。# accept是一个阻塞的方法(你不来我就不动!),等待连接,每建立一个连接就会创建一个单独的通道。# conn:通道参数;addr:通道地址(客户端连接服务端的IP和端口号,这个客户端的端口号是随机生成的!)。new_cli, addr = server.accept()# 打印一下ip和端口号的类型print('来自一个新的连接', addr, type(addr))# 5.设置接收数据的大小data = new_cli.recv(1024)print(data)# 6.关闭这个连接的通道new_cli.close()# 关闭整个服务器server.close()
复制代码

②传统 TCP 客户端搭建步骤及代码:

  • 1.指定服务器的 IP 和端口号

  • 2.发送数据给服务器

  • 3.指定发送服务器的文件大小


# -*- coding: utf-8 -*-"""__author__ = 孤寒者"""import socket
# 建立服务器对象 通过打印这个client服务器对象可知:默认使用的是IPV4,协议是TCP。client=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 指定服务器的ip和端口号client.connect(('127.0.0.1',8080))# 发送数据给服务器client.send(b'hello server')# 指定发送给服务器的文件大小data = client.recv(1024)print(data)
复制代码

运行:


  • 注意上面传统 TCP 服务器中 accept()是一个阻塞的方法(你不来我就不动!),这就会产生网络等待的问题,同时这也是多线程中线程切换的问题,会因为阻塞而造成等待!

  • 而一开始我也说了协程是非阻塞的,所以这里就在 tcp 服务器中使用协程,引入非阻塞(让服务器接收数据的形式变为非阻塞!)——解决线程之间(服务器和客户端两个线程)的切换问题!!!

(2)引入非阻塞的 TCP 服务器端代码:

import socketimport threading

def handle_func(new_sock): while True: data = new_sock.recv(4) # 接收数据 print(data) if data is None: break new_sock.close()
while 1: # 服务器对象 socket.AF_INET:使用IPV4; socket.SOCK_STREAM:创建一个socket套接字。 server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定服务器 server.bind(("127.0.0.1", 8000)) # 监听 server.listen(128) print('服务器开启', 8000)
# accept是一个阻塞的方法(你不来我就不动!),等待连接,每建立一个连接就会创建一个单独的通道。 # conn:通道参数;addr:通道地址(客户端连接服务端的IP和端口号,这个客户端的端口号是随机生成的!)。 new_cli, addr = server.accept() # 打印一下ip的类型 print('来自一个新的连接', addr, type(addr)) server.setblocking(False) # 设置套接字为非阻塞 找epoll使用 解决网络的等待问题 # 注意:协程要依附于线程! task = threading.Thread(target=handle_func, args=(new_cli,)) task.start()
复制代码

运行:

二、本 tornado 项目简介:搭建一个仿 Instagram 的网站

  • 为什么做一个模仿 Instagram 的应用(1)偏后端和后台的开发(2)充分利用 tornado 的特点(3)积累项目经验,巩固知识点

  • Instagram 主要组成(1)发现或最近上传的图片页面(2)所关注的用户图片流(3)单个图片详情页面(4)数据库 Database(5)用户档案 User Profile

三、本项目大致流程

  • (1)从最简单开始,迭代增加功能

  • (2)用户,登陆,关注等

  • (3)数据库保存

  • (4)UI 和 Web 界面美化

  • (5)外部连接

  • (6)部署和运行

  • ...(敬请期待~)


本专栏在 CSDN 开设,目前已更新完毕,如有兴趣可以去 CSDN!

发布于: 刚刚阅读数: 4
用户头像

孤寒者

关注

同名微信公众号【孤寒者】 2021.11.09 加入

还未添加个人简介

评论

发布
暂无评论
1.Tornado简介&&本专栏搭建tornado项目简介_Python_孤寒者_InfoQ写作社区