Python:单线程非堵塞实现HTTP服务端_方法封装版

Java基础知识面试题(2026版) 序列号 内容 链接 1 Java基础知识面试题(2022版) 待续… 2 Java集合容器面试题(2022版) 待续… 3 Java异常面试题(2022版) 待续… 4 并发编程面试题 (2022版) 待续… 5 JVM面试题(2022版) 待续… 6 Spring面试题(2022版) 待续… 7 Spring MVC面试题(2022版) 待续… 8 Spring Boot面试题(2022版) 待续… 9 Spring Cloud面试题(2022版) 待续… .... 阅读详情

利用非堵塞来提高资源利用率.

可以尽量服务多个客户端,防止浪费资源等待客户端.

已去注释,需要可以上传注释版

import socket,re,time


def open_file(路径):
    try:
        client_html_data=open('python_demo/HTTP协议/'+路径,'rb')
    except Exception as  ret:   
        return '404错误 页面不存在,请重新输入地址'.encode('gbk')
    else: 
        html_read_data=client_html_data.read()
        client_html_data.close()
        return html_read_data


def service_client(client_socket,recv_data):
    print('客户端发送的请求内容:')
    print('-'*50)
    print(recv_data)
    print('-'*50)
    ret_filename_=re.search(r'\w+\.html|favicon.ico',recv_data) 
    if ret_filename_: 
        file_name=ret_filename_.group()
        file_data=open_file(file_name) 
        html_header='HTTP/1.1 200 OK\r\n'   
        html_header+='Content-length:%d\r\n\r\n'%len(file_data) 
        client_socket.send(html_header.encode('gbk'))
        client_socket.send(file_data) 
    else: 
        file_data=open_file('index.html')   
        html_header='HTTP/1.1 200 OK\r\n'   
        html_header+='Content-length:%d\r\n\r\n'%len(file_data) 
        client_socket.send(html_header.encode('gbk'))
        client_socket.send(file_data) 


def main():
    ''' 主线程 '''
    tcp_socket_sever=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    tcp_socket_sever.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)      
    tcp_socket_sever.bind(('127.0.0.1',8001))
    tcp_socket_sever.listen(128)
    tcp_socket_sever.setblocking(False) 
    print('服务端已运行---------------------------------------')
    client_socket_list=list()
    while True:
        time.sleep(1)
        try:
            new_client_socket,clientAddr=tcp_socket_sever.accept() 
        except Exception as ret:  
            print('客户端链接个数:',len(client_socket_list))
            print('等待新客户端链接------------')
        else: 
            new_client_socket.setblocking(False) 
            client_socket_list.append(new_client_socket) 
        for client_socket in client_socket_list:  
            try:
                recv_data=client_socket.recv(10240).decode('gbk') 
            except Exception as  ret:   
                print('列表中对象有: ',client_socket)
            else: 
                if recv_data : 
                    service_client(client_socket,recv_data) 
                else: 
                    client_socket_list.remove(client_socket)
                    client_socket.close()
    tcp_socket_sever.close() 


if __name__ == '__main__':
    main()

 

python用单进程单线程非堵塞实现长链接http服务器 python用单进程单线程非堵塞实现长链接http服务器 其中需要注意的是非堵塞的设置方式 立即下载

相关推荐

Python实现简单http服务器

写一个python脚本,实现简单的http服务器功能: 1.浏览器中输入网站地址:172.20.52.163:20014 2.server接到浏览器的请求后,读取本地的index.html文件的内容,回发给浏览器 代码实现 server.py #!/usr/bin/python import socket import signal import errno from time import sleep def HttpResponse(header,whtml): f = file(whtml) contxtlist = f.readlines() context = ''

python -- requests库封装

requests是基于Python开发的HTTP 库,requests是在urllib的基础上进行了高度的封装,它不仅继承了urllib的所有特性,而且还支持一些其它的特性,比如使用Cookie保持会话、自动确定响应内容的编码等,可以轻而易举地完成浏览器的任何操作。用的比较多的类有:🎈 requests.Request:用于请求发送到服务器🎈 requests.Response:服务器对HTTP请求的响应,可以返回响应码、请求头、请求url,JSON格式的结果等。

qq_42873925的博客 1104

同花顺Supermind量化交易 技术面分析专题(一)-- 相似k线的形态验证与选股

W底”,“多头上涨”,“趋势回踩”,”上涨中继“这些都是常见的K线形态,以”上涨中继“为例,当股价快速上涨后,出现盘整形态而非顶部形态,预示股价还会进一步上涨,那么本节主要讲述”上涨中继”形态是否能够预测未来股价上涨,以及如何应用“上涨中继”形态,来快速选股。"相似K线"技术相比于传统的K线组合而言更具技术性,其还有较多的运用空间,比如:运用顶部形态来监控个股潜在的下跌风险,运用相似度来监控个股是否脱离大盘走势,研究各类形态的上涨预测能力,并应用于选股等等。第一步:选取一段标准的“上涨中继”形态K线图。

qq_22808537的博客 4556

Python 同、异步HTTP客户端封装:性能与简洁性的较量

在中,我们谈到在Python中利用基于类的描述器(descriptor)和函数修饰器(decorator),可以实现针对对象属性访问的拦截操作。那么我们很容易想到,既然可以拦截对属性的访问操作,那么也就一定能够实现针对属性的编辑操作的拦截。这个代码对于认真看了上篇文章的同学来说难度应该不大,因此这里我仅作简单的分析。为了实现对属性编辑操作的拦截,我这里在描述器类my_property中定义了setter和__set__这两个方法。setter负责接收实际实现属性编辑操作的函数fset。

白帽阿叁的博客 442

Windows 10下用Python 3搞定Android源码下载:最新repo工具避坑指南

本文详细介绍了在Windows 10系统上,使用Python 3和官方最新repo工具下载Android源码的完整流程。文章提供了从Git安装、环境配置到repo工具初始化、同步加速及常见错误排查的避坑指南,帮助开发者高效搭建稳定的源码下载环境。

weixin_29266749的博客 437

基于Windows环境的OGG远程抽取异常(经典模式)OGG-02830 Formatting error

MOS提供的解决方法,根据MOS的提示是由于使用的OGG版本太新了,经典模式下已经弃用了这种远程抽取方式。问题:Windows环境下启用远程抽取ADG备库的数据,在启动抽取进程的时候出现如下错误提示。

Mrzhou的博客 380

python网络基础之单进程单线程实现非堵塞的http服务器

用单进程/单线程我们可以实现一个返回网页页面的http服务器,其中主要的是把堵塞变为非堵塞 套接字.setblocking(False),来实现一个长连接 import socket import re import time def main(): # 创建套接字 socket_tcp = socket.socket(socket.AF_INET, socket.SOCK_S...

yilv12123的博客 431

Linux -- 图形界面配置Samba;system-config-samba工具

图形界面配置Samba6.6.1 system-config-sambasystem-config-samba是Red Hat公司专门为Samba服务器管理编写的图形界面的管理工具,通过system-config-samba几乎可以完成对Samba服务器的所有配置,所以在只希望通过Samba服务器实现一些简单的资源共享时,system-config-samba是一个不错的选...

weixin_33695450的博客 2201

python_记录问题HTTP请求的封装

1.

qq_48848705的博客 501

Python爬虫实战:汽车之家车型参数与口碑数据抓取分析

在当今信息爆炸的时代,购车决策已从传统的4S店咨询转变为数据驱动的智能化过程。汽车之家作为国内领先的汽车信息平台,汇聚了海量车型参数、车主口碑和专业评测数据。本文将详细介绍如何使用Python最新爬虫技术构建一个高效、稳定的汽车数据采集系统,通过多维度数据分析辅助用户做出更明智的购车决策。本项目将采用异步爬虫、智能反爬绕过、数据清洗与分析等现代化技术栈,完整实现从数据采集到可视化分析的全流程。本文详细介绍了如何使用Python最新技术构建一个功能完整的汽车之家数据爬虫系统。

2201_76125261的博客 1490

华为od 面试八股文_测试/测试开发_01_含答案

华为od面试八股文_测试/测试开发_01_含答案

MISAYAONE的博客 3821

Python:单线程HTTP服务端_方法封装版

最简单最原始的HTTP版本. 已经去掉注释,如果需要注释我上传注释版. import socket,re,time def open_file(路径): try: client_html_data=open('python_demo/HTTP协议/'+路径,'rb') except Exception as ret: return ...

include_ice的博客 315

DO-254标准详解:航空电子硬件设计保证指南全方位解析

RTCA DO-254, 也被称为《机载电子硬件设计保证指南》,是航空电子硬件设计和验证中的关键标准,旨在为确保机载电子硬件的安全性提供设计保证。自2000年首次发布以来,DO-254就成为了民航和军用飞机中电子硬件设计认证的基准文件。随着航空硬件技术的进步和日益复杂化,确保硬件设计的准确性、可靠性和安全性变得至关重要。本标准是由RTCA和EUROCAE共同开发的,适用于涉及机载硬件的航空公司、飞机制造商、供应商和认证机构。

qq_41854911的博客 3682

python实现多进程与多线程HTTP服务器,浏览器通过HTTP与之通信3

因为网络间通信是基于TCP协议传输数据的,而服务器与浏览器之间通信是基于HTTP协议的,那么下面基于python实现一个多进程或多线程tcp服务器,浏览器可以基于http协议进行发送请求和解析。浏览器展示返回的一个标准的HTML网页,此外实现服务器解析客户端多次请求并且返回请求结果。即:客户端根据HTML里面的各种链接,再发送HTTP请求给服务器,拿到相应的图片、视频、Flash、...

涤生大数据 4445

MIKE水动力笔记4_制作网格

建立水动力模型前的重要一步就是制作网格,本文所讲内容就是如何在MIKE中制作网格。

晏长街的博客 2万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Tornado简介与特性

目录:一. Tornado简介二. Tornado的特性 一. Tornado简介 Tornado全称Tornado Web Server,是一个用Python语言写成的Web服务器兼Web应用框架,由FriendFeed公司在自己的网站FriendFeed中使用,被Facebook收购以后框架在2009年9月以开源软件形式开放给大众。 特点: 作为Web框架,是一个轻量级的Web框架,类似于另一个Python web框架Web.py,其拥有异步非阻塞IO的处理方式。 作为Web服务器,Tornado

longlong6682的博客 1176

贝叶斯统计 [韦来生编]

贝叶斯(Bayes)统计是近几十年来迅速发展起来的数理统计的一个重要分支。贝叶斯方法与经典统计方法的主要不同之处是进行统计推断时除了利用样本信息外,还要利用参数的先验信息,因此可以提高统计推断或统计决策的效果。它在经济、金融、生物、医学、自然科学和社会科学等许多领域具有广泛的应用。贝叶斯方法的研究已渗透到了统计学的几乎所有领域。作者在给中国科学技术大学概率论与数理统计专业本科生开设的“数理统计”课程中有一章专门讲授“贝叶斯方法和统计决策理论”,近十年来也给中国科学技术大学概率统计专业研究生开设过几次“贝叶斯分析”课。本书是在对过去讲稿的内容作了适当的增减和调整的基础上完成的。  本书共分六章。第1章是绪论,介绍了贝叶斯统计的若干基本概念,同时对必要的数理统计的基础知识有重点地作了回顾。第二章介绍了确定先验分布的若干可供选择的方法。第三章介绍了几类常见统计模型参数的后验分布的主要结果和计算方法。第四章和第五章分别介绍了“贝叶斯统计推断”和“贝叶斯统计决策”的内容。第六章介绍了贝叶斯统计计算的若干方法,包括蒙特卡洛方法和马尔可夫链蒙特卡洛(MCMC)方法以及相关统计软件的简介。本书的每一章附右大量的例题和习题,书末附有常用的几个表格和部分习题解答供读者查用。  大约可在54学时内讲授本书的第1章至第六章的主要内容,教师可根据学时需要选讲本书第1章至第六章的部分内容。书中标“*”号的章节可略去不讲,留给读者作为阅读材料。第六章例题中的R代码和部分例题的数据文件等可从作者个人主页下载。  作者在编写本书的过程中参考了J.O.Berger教授的《统计决策论及贝叶斯分析》和茆诗松教授编写的《贝叶斯统计》等书中的一些内容,以及《贝叶斯分析》一书中由张伟平博士编写的有关贝叶斯统计计算的一些内容。在此表示衷心感谢。  本书编写准备过程中,中国科学技术大学统计与金融系的几个研究生帮助完成了本书部分中文的录入和排版,作者对他们的辛勤工作表示真诚的感谢。高等教育出版社为本书的出版给予了大力支持。在此一并致谢。

别再被‘pip不是内部命令’卡住了!Python新手必看的pip环境配置保姆级教程(附两种修复方法)

本文详细解析了Python新手常见的'pip不是内部命令'问题,提供了两种可靠的修复方法,包括使用ensurepip模块和get-pip.py脚本安装。同时,文章还介绍了如何永久配置环境变量,以及高级技巧如多版本管理、虚拟环境使用等,帮助开发者彻底解决pip环境配置问题。

weixin_33701617的博客 565

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

介绍两个Python web框架:Django & Tornado

在各种语言平台中,python涌现的web框架恐怕是最多的;猜想原因应该是在py中构造框架十分简单,使得轮子不断被发明。 这里记述一下我了解过的两个py web框架,供大家参考,希望能起他山之石的作用。 ====== Django ====== Django 应该是最出名的py框架,Google App Engine甚至Erlang都有框架受它影响。 Django是走大而全的方

1007

两个Python web框架:Django & Tornado

在各种语言平台中,python涌现的web框架恐怕是最多的;猜想原因应该是在py中构造框架十分简单,使得轮子不断被发明。这里记述一下我了解过的两个py web框架,供大家参考,希望能起他山之石的作用。Django Django 应该是最出名的py框架,Google App Engine甚至Erlang都有框架受它影响。Django是走大而全的方向,它最出名的是其全自动化的管理后台:只需...

u010795513的博客 148

了解python web架构_了解两个python web框架:Django&&Tornado

作为一名大学生,我在找暑期实习的时候发现基本上关于python web的工作都会提及一个框架Django,于是好奇的在博客园寻找了一下相关文章并总结一下:Django:Django毫无疑问是当下最出名的python应用框架,采用了MVC框架模式,模型M,视图V和控制器C,对这个我印象很深因为软件体系结构课讲过,这套框架以比利时的吉普赛爵士吉他手Django Reinhardt来命名的。有了框架,我...

weixin_39849762的博客 109

两个python_介绍两个Python web框架:Django & Tornado

在各种语言平台中,python涌现的web框架恐怕是最多的;猜想原因应该是在py中构造框架十分简单,使得轮子不断被发明。这里记述一下我了解过的两个py web框架,供大家参考,希望能起他山之石的作用。在各种语言平台中,python涌现的web框架恐怕是最多的;猜想原因应该是在py中构造框架十分简单,使得轮子不断被发明。这里记述一下我了解过的两个py web框架,供大家参考,希望能起他山之石的作用。...

weixin_39790528的博客 94

两个python_两个Python web框架:Django & Tornado

在各种语言平台中,python涌现的web框架恐怕是最多的;猜想原因应该是在py中构造框架十分简单,使得轮子不断被发明。这里记述一下我了解过的两个py web框架,供大家参考,希望能起他山之石的作用。DjangoDjango 应该是最出名的py框架,Google App Engine甚至Erlang都有框架受它影响。Django是走大而全的方向,它最出名的是其全自动化的管理后台:只需要使用起ORM...

weixin_39562340的博客 90

Tornado介绍和开始使用Tornado

Tornado简介 Tornado全称Tornado Web Server,是一个用Python语言写成的Web服务器兼Web应用框架,由FriendFeed公司在自己的网站FriendFeed中使用,被Facebook收购以后框架在2009年9月以开源软件形式开放给大众。 特点: 作为Web框架,是一个轻量级的Web框架,类似于另一个Python web框架Web.py,其拥有异步非阻...

zhang_Ming_lu的博客 4万+

python django框架 比php_两个Python web框架:Django & Tornado比较

在各种语言平台中,python涌现的web框架恐怕是最多的;猜想原因应该是在py中构造框架十分简单,使得轮子不断被发明。这里记述一下我了解过的两个py web框架,供大家参考,希望能起他山之石的作用。DjangoDjango 应该是最出名的py框架,Google App Engine甚至Erlang都有框架受它影响。Django是走大而全的方向,它最出名的是其全自动化的管理后台:只需要使用起ORM...

weixin_39837867的博客 307

了解两个python web框架:Django&&Tornado

作为一名大学生,我在找暑期实习的时候发现基本上关于python web的工作都会提及一个框架Django,于是好奇的在博客园寻找了一下相关文章并总结一下: Django: Django毫无疑问是当下最出名的python应用框架,采用了MVC框架模式,模型M,视图V和控制器C,对这个我印象很深因为软件体系结构课讲过,这套框架以比利时的吉普赛爵士吉他手Django Reinhardt来命...

dingpeizan8095的博客 279
上一篇: Python:单线程HTTP服务端_方法封装版
下一篇: Python:使用协程实现HTTP服务端.
include_ice
博客等级 码龄9年 307粉丝 139原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值