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 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)部署和运行
  • …(敬请期待~)
  • 21
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 21
    评论
要使用 Tornado 搭建 WebSocket 客户端,可以按照以下步骤进行: 1. 安装 Tornado 使用 pip 安装 Tornado: ``` pip install tornado ``` 2. 编写客户端代码 在 Tornado 中,可以使用 `websocket.WebSocketClientConnection` 类来创建 WebSocket 客户端连接。以下是一个简单的例子: ```python import tornado.websocket import tornado.ioloop class MyWebSocketClient(tornado.websocket.WebSocketClientConnection): def on_message(self, message): print("Received message: {}".format(message)) def on_close(self): print("Connection closed") if __name__ == "__main__": ws_url = "ws://example.com/socket" ws_client = MyWebSocketClient(ws_url) ws_client.connect() tornado.ioloop.IOLoop.current().start() ``` 在这个例子中,我们创建了一个名为 `MyWebSocketClient` 的类,继承自 `WebSocketClientConnection`。我们重载了 `on_message` 和 `on_close` 方法来处理消息和关闭事件。在 `main` 函数中,我们创建了一个 `MyWebSocketClient` 对象,并调用了 `connect` 方法来建立连接。最后,我们启动了 Tornado 的 I/O 循环。 3. 运行客户端代码 运行客户端代码,即可建立 WebSocket 连接并接收来自服务器的消息。如果你想发送消息,可以使用 `write_message` 方法。例如,在 `MyWebSocketClient` 类中添加以下方法: ```python def send_message(self, message): self.write_message(message) ``` 然后,在 `main` 函数中调用 `ws_client.send_message("hello")` 就可以发送消息了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孤寒者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值