admin管理员组

文章数量:1794759

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

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

目录:
  • 〇、每篇前言:
  • 一、tornado简介
    • 来讲一讲tornado速度为何会非常快?
      • (1)传统TCP客户端及服务器端搭建:
        • ①传统TCP服务器端搭建步骤及代码:
        • ②传统TCP客户端搭建步骤及代码:
      • 运行:
      • (2)引入非阻塞的TCP服务器端代码:
      • 运行:
  • 二、本tornado项目简介:搭建一个仿Instagram的网站
  • 三、本项目大致流程

〇、每篇前言:
  • 🏆🏆作者介绍:【孤寒者】—CSDN全栈领域优质创作者、HDZ核心组成员、华为云享专家Python全栈领域博主、CSDN原力计划作者

  • 🔥🔥本文已收录于tornado框架从入门到实战专栏:《tornado框架从入门到实战》
  • 🔥🔥热门专栏推荐:《Django框架从入门到实战》、《爬虫从入门到精通系列教程》、《爬虫高级》、《前端系列教程》、《tornado一条龙+一个完整版项目》。
  • 📝​📝本专栏面向广大程序猿,为的是大家都做到Python从入门到精通,同时穿插有很多很多习题,巩固学习。
  • 🎉🎉订阅专栏后可私聊进一千多人Python全栈交流群(手把手教学,问题解答); 进群可领取Python全栈教程视频 + 多得数不过来的计算机书籍:基础、Web、爬虫、数据分析、可视化、机器学习、深度学习、人工智能、算法、面试题等。
  • 🚀🚀加入我一起学习进步,一个人可以走的很快,一群人才能走的更远!

一、tornado简介
  • 【tornado官方中文文档】

  • tornado是Python的web框架。

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

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

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

两个常见的协议:

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

  • 通信协议: 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 socket import 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)部署和运行
    • …(敬请期待~)

    本文标签: 简介专栏项目Tornado