python waitress_python 角度理解web服务器

2023-11-11

概述:

web服务器实际上就是一个运行在物理机上的网络服务器,它等待客户端给他发送请求,成功接收后将客户端请求的资源响应给它。客户端与服务端的通信通过http协议实现。客户端可以是浏览器或者可以发送请求的一段程序。

一、一个简单的web服务器

我们可以通过socket()函数来创建一个网络连接,或者说打开一个网络文件,socket的返回值就是一个文件描述符。有了文件描述符,我们就可以使用普通的文件操作函数来传输数据了,例如

read 用来读取数据

write 用来写数据

只要你创建了连接,剩下的就是文件操作了

import socket

host, port = '', 8080

# SOCK_STREAM 流格式套接字,也叫面向连接的套接字(使用TCP协议)

# AF_INET使用ipv4地址

#一般情况下有了 af 和 type 两个参数就可以创建套接字了,操作系统会自动推演出协议类型

listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM, proto=0)

listen_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

listen_socket.bind((host, port))

listen_socket.listen(5)

print(f'Service HTTP on Port {port}')

while True:

client_connection, client_address = listen_socket.accept()

request = client_connection.recv(1024)

print(request)

http_response = """\HTTP/1.1 200 OK

Hello world!

"""

client_connection.sendall(http_response)

client_connection.close()

接下来,我们考虑如何将我们的web应用放在我们写的web服务器上运行,那么我们如和做到不同的应用在不修改架构和代码的前提下可以让应用正常的运行在web服务器上,答案就是python web server gateway interface(简称WSGI,读作wizgy)

WSGI允许开发者选择将web应用框架和web服务器分开,如此你可以将web框架和web服务器混合匹配使用,选择一个适合你需要的配对。比如,你可以在Gunicorn 或者 Nginx/uWSGI 或者 Waitress上运行 Django, Flask, 或 Pyramid。真正的混合匹配,得益于WSGI同时支持服务器和架构。

下面我们去实现一个简单的WSGI服务器:

import socket

import sys

import io

class WSGIServer(object):

address_family = socket.AF_INET

socket

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python waitress_python 角度理解web服务器 的相关文章

  • Spring + MyBatis

    MyBatis ORM 对象 关系映射 完成对象数据到关系型数据映射的机制称为对象 关系映射 1 MyBatis是一个ORM框架 也是一个持久层框架 MyBatis封装了JDBC 将数据库中的表数据自动封装到对象中 这样就可以以面向对象的方
  • 快手小店怎么引流?快手怎么做店铺引流?

    短视频的内容丰富 更能吸引广大用户 因为它可以让用户得到视觉的享受等等 就像快手平台 以短视频迅速攻占用户的心 尤其是三四线城市的用户 非常喜欢在快手上分享自己的生活和见闻 现在就连淘宝也想借助快手平台为自己的店铺进行引流 快速实现产品的变
  • IDEA常用插件之注解插件

    文章目录 注解插件 JavaDoc插件 安装 修改配置 生成文档加入自己信息 Easy JavaDoc 安装插件 在线安装 离线安装 中文名自动转英文 加注释 默认快捷键 可通过IDEA快捷键设置修改 注解插件 JavaDoc插件 安装 修
  • 数据库SQL语句期末总复习

    文章目录 SQL的分类 DDL数据定义语言 数据库的定义与撤销 基本表的定义与维护 索引的建立与删除 DQL数据查询语言 单表查询 查询结果排序 分组查询 连接查询 嵌套查询 集合查询 DML数据操作语言 插入数据 更新数据 删除数据 视图
  • 创建HttpPost和HttpGet请求

    1 创建工具类 HttpClient import com alibaba fastjson JSON import org apache http HttpStatus import org apache http client conf
  • react 函数组件父组件调用子组件方法

    react 函数组件父组件调用子组件方法 父组件利用ref对子组件做标记 通过调用子组件方法更改子组件状态 也可以调用子组件方法 首先在父组件中 使用useRef创建一个ref import LogModal from logModal i
  • vue单选框选中_vue radio单选框,获取当前项(每一项)的value值操作

    前言 本文使用了lable关联选中 实际使用中如果不需要 直接将循环语句 v for 写在 input标签上就可以 1 使用v for循环的radio单选框 01 需要注意的是 这是使用的是 change 事件 而不是 click 点击事件
  • NSSCTF刷题

    web NSSCTF 2022 Spring Recruit babyphp
  • UEFI基本概念

    TianoCore UEFI EDK2 UEFI Unified Extensible Firmware Interface 用来取代BIOS TianoCore 一个社区 支持UEFI的开源实现 EDK2 一种UEFI的开发环境 UEFI
  • AI大模型有哪些?国内的

    今年相信大家都被ChatGPT刷过屏 因为它太好用了 问它一个问题 它就能回答 可以帮助我们写各种文字 甚至写代码 对于我们的工作有着很大的帮助 国内这半年对于AI这个行业也出现了很多的公司以及产品概念 各家大厂也在抓紧研发 和GPT一样的
  • 读写锁 share_mutex

    实现一个Windows下的共享锁 读写锁 一 作者 tyc611 cublog cn 2008 11 18 在Windows Vista Server 2008之前 Windows没有提供共享锁 通俗称为读写锁 只能靠自己实现 但从Wind
  • java基础面试题系列(71 - 80)

    20200714 by 1z 请你说明HashMap 和 HashTable的区别 1 是否同步 HashMap是非同步的 HashTable是同步的 2 继承体系 HashTable继承自Dictionary HashMap继承自Abst
  • Linux下多进程通信(signal,pipe)

    操作系统实验导航 实验一 银行家算法 https blog csdn net weixin 46291251 article details 115384510 实验二 多级队列调度和多级反馈队列调度算法 https blog csdn n
  • GpuMat ROI

    在引用GpuMat数据的ROI时 需要保证该数据在Gpu 内存中存储是连续的 使用gpu createContinuous创建连续空间 cuda GpuMat dst pyr laplace tmp dst pyr laplace gpu
  • LL(1)文法构造FIRST、FOLLOW、分析表并分析

    一 实验目的 学生运用编译原理的知识在实验技能和方法自行设计实验方案并加以实现 二 使用仪器 器材 计算机一台 操作系统 Windows10 编程软件 Intellij IDEA 三 实验内容及原理 1 实验内容 输入任意一个正确的文法G
  • Windows音量变化通知 - 系统音量监控

    Windows音量变化通知 系统音量监控 Endpoint Volume Controls 1 实现IAudioEndpointVolumeCallback接口 2 主函数 总结 参考 Endpoint Volume Controls 本次
  • 婚姻好不好,嫁给谁很重要

    都说幸福的婚姻是相似的 不幸的婚姻各有各的不幸 事实上 那些不幸的婚姻 追根究底不过都是找错了人 婚姻好不好 关键就在于嫁给谁 因为 值得相信的从来不是感情 而是人 人若靠谱 婚姻便可靠 人若靠不住 婚姻迟早生变 这世上 有的夫妻恩恩爱爱
  • 一次发生在JVM新生代和老年代的GC过程简述

    首先 我们假设程序当前的堆空间的情况如下 然后 程序在运行过程中 开始了我们的第一次YoungGC 年轻代GC 得到如下的图 通过这次的GC 我们的2 3 4对象都被回收了 只有1对象得到了保留 进入了S1 幸存者区 然后我们的程序在运行的
  • Java 通过Soap方式调用WebService接口

    import org apache commons lang3 StringEscapeUtils import org apache http HttpEntity import org apache http client config

随机推荐

  • 短视频seo抖音矩阵源码开发搭建技术解析

    一 短视频seo抖音矩阵源码开发需要考虑以下几个方面 技术选型 选择合适的开发语言 框架和数据库 常用的开发语言有Java PHP等 常用的框架有Spring Django等 常用的数据库有MySQL MongoDB等 服务器的选择 根据应
  • 如何在 NodeJs 中上传、处理和存储文件:分步手册

    存储文件有三种基本方法 1 直接将其存储在数据库中 2 将其存储在文件系统中并将路径保存到数据库 3 将其存储在某些云存储中 例如 Amazon S3 Google Cloud Storage 或 Microsoft Azure Blob
  • 去除自定义AlertDialog黑边

    http blog csdn net mwj 88 article details 45482421 1 现象描述 html view plain copy View view LayoutInflater from getActivity
  • java学习笔记——day1

    java笔记 字面量 变量 数据类型 命名规则 类型转换 运算符operator API 程序的流程控制 数组 字面量 变量 字面量 计算机用来处理数据的 字面量就是告诉程序员 数据在程序中的书写格式 字符 单引号 一个字符 字符串 双引号
  • python+selenium自动化软件测试(第3章):unittes

    3 1 unittest简介 前言 python基础比较弱的 建议大家多花点时间把基础语法学好 这里有套视频 可以照着练习下 http pan baidu com s 1i44jZdb 密码 92fs 熟悉java的应该都清楚常见的单元测试
  • 分层测试(一):什么是分层测试?

    什么是分层测试 分层测试是通过对质量问题分类 分层来保证整体系统质量的测试体系 模块内通过接口测试保证模块质量 多模块之间通过集成测试保证通信路径和模块间交互质量 整体系统通过端到端用例对核心业务场景进行验证 用户体验通过手工测试确保无妨碍
  • Unity开发(2)建片草地

    文章目录 1 简述 2 创建 2 1 创建项目 2 2 进入开发窗体 3 建个地面 3 1 新建地面 3 2 调整地面大小 3 3 添加草地 3 3 1 初识Unity图片资源 3 3 2 添加图片资源 3 3 3 修改图片在场景中大小 1
  • C语言入门知识1(零基础新手适用)

    C语言入门知识1 零基础新手适用 程序语言 1 机器语言 机器语言是低级语言 是用01码来编写的二进制代码语言 2 汇编语言 汇编语言也是低级语言 是用英文字母和符号串编写的 3 高级语言 由于汇编语言依赖于硬件体系且符合较多 为了方便高级
  • Go中 defer的使用

    文章目录 简介 示例 使用场景 捕获异常 文件操作 简介 defer 是 Golang 中的一个非常有用的关键字 它用于注册延迟调用 也就是一个函数的执行被延迟到调用它的函数返回之后 常用于资源清理 异常处理等场景 示例 defer 是注册
  • python实现电子邮件编程

    一 几个专业名词 MUA MTA MDA 假设我们自己的电子邮件地址是me 163 com 对方的电子邮件地址是friend sina com 注意地址都是虚构的哈 现在我们用Outlook或者Foxmail之类的软件写好邮件 填上对方的E
  • C++提高8: 类模板成员函数类外实现和类模板分文件编写

    1 类模板成员函数类外实现 类外实现主要有三个关键点 作用域 识别T的数据类型 告诉编译器这是一个类模板 剩下的 就还是基础的类内声明类外定义实现了 直接上代码观察一下 include
  • redis后台实现投票功能

    原创文章 转载请注明出处https blog csdn net qq 41969845 article details 108406059 一 前言 本文以投票功能为例 从实际例子中熟练掌握redis的应用 阅读本文需要有一定的Java基础
  • SparkStreaming与Kafka010之05之01 Consumer

    package Kafka010 import Kafka010 Utils MyKafkaUtils import org apache kafka clients consumer ConsumerRecord import org a
  • 常用网络数据帧格式

    常用网络数据帧格式 1 ARP帧格式 2 ICMP帧格式 3 UDP帧格式 4 TCP帧格式 本文主要介绍ARP ICMP UDP TCP等常用网络数据帧格式 1 ARP帧格式 当一个应用层的数据在网络中传输时 会被逐步封装成链路层的帧 而
  • ffplay源码解析-main入口函数

    main入口函数 初始化 变量 缓存区 SDL窗口初始化等 int main int argc char argv int flags VideoState is av log set level AV LOG TRACE init dyn
  • L1-086 斯德哥尔摩火车上的题(15分) Python

    上图是新浪微博上的一则趣闻 是瑞典斯德哥尔摩火车上的一道题 看上去是段伪代码 s a 1112031584 for i 1 i lt length a i if a i 2 a i 1 2 s max a i a i 1 goto url
  • 2020-11-24-ElasticSearch7.x学习笔记

    笔记记录 B站狂神说Java的ElasticSearch课程 https www bilibili com video BV17a4y1x7zq 在学习ElasticSearch之前 先简单了解一下Lucene Doug Cutting开发
  • 根据PV或者QPS来计算需要多少台机器

    QPS 单个进程每秒请求服务器成功的次数 req sec 总请求数 进程总数 请求时间 一般使用http load进行统计 每台服务器每天的PV QPS x 3600 x 6 或者乘以8小时 一天按照6或者8小时计算 晚上可能没人访问 服务
  • Conda环境 下载Jupyter Lab并使用

    1 下载Jupyter Lab conda 安装方式 conda install jupyterlab conda install c conda forge jupyterlab python 安装方式 pip install jupyt
  • python waitress_python 角度理解web服务器

    概述 web服务器实际上就是一个运行在物理机上的网络服务器 它等待客户端给他发送请求 成功接收后将客户端请求的资源响应给它 客户端与服务端的通信通过http协议实现 客户端可以是浏览器或者可以发送请求的一段程序 一 一个简单的web服务器