socket实现web应用的本质

html登录页面整理 3 function r() { var username=document.getElementById("username"); var pass=document.getElementById("password"); if(username.value=="") { alert("请输入用户名"); username.focus(); return; } if 阅读详情

1、Django基础

Django是一个高级的Python Web框架,用于快速开发安全且可维护的网站。它遵循MVC设计模式,但通常使用MTV(Model-Template-View)架构来描述其组件。

2、CS模式与BS模式

CS模式(Client-Server):客户端和服务器直接通信,客户端通常需要安装特定的软件。

BS模式(Browser-Server):通过Web浏览器与服务器通信,不需要在客户端安装额外软件,更加轻便和普遍。

3、WEB相关

HTTP协议:Web通信的基础,定义了客户端和服务器之间如何交换信息。

浏览器:作为客户端,使用HTTP协议向服务器发送请求。

服务器:响应来自浏览器的请求,并发送回相应的数据。

4、http协议

基于请求响应模式:Web通信建立在请求和响应的基础上,浏览器先发出请求,服务器再给出响应。

基于TCP协议:http协议建立在TCP协议的基础之上,是在应用层做的封装,即里面包含了三次握手的过程,并且对内容格式做了限制。

请求协议格式:通常包括请求行(方法、URL、协议版本)、请求头(附加信息)和请求体(POST数据等)。

        url:  协议://域名(IP)+端口(80)/路径?参数(a=1&b=2) 

        示例:https://www.baidu.com/s/?wd=mi

"""

        请求首行            请求方式               url(路径?get请求参数)         协议/版本号 
        请求头                key: value

        请求体                数据(只有post请求才会有请求体)

""" 

响应协议格式:

"""

        响应首行:包括协议/版本号、状态码和状态消息(如“HTTP/1.1 200 OK”)。

        响应头:包含关于响应的附加信息,如Content-Type指明响应内容的类型(如text/html表示HTML文档)。

        响应体:实际返回给浏览器的数据内容,如HTML代码、JSON对象等。

""" 

5、socket实现web应用的本质

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="icon" href="https://www.jd.com/favicon.ico">
</head>
<body>
<h1>Hello, world!</h1>
<img src='data:image/jpeg;base64,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'>
</body>
</html>
import socket
def handle_request(client):
    request_data = client.recv(1024)
    print("request_data: ",request_data)
    # client.send("HTTP/1.1 200 OK\r\nstatus:200\r\nContent-Type:text/html\r\n\r\n<h1>Hello, world!</h1><img src=''>".encode("utf8"))

    with open("jd.html","rb") as f:
        data=f.read()

    client.send(b"HTTP/1.1 200 OK\r\nstatus:200\r\nContent-Type:text/html\r\n\r\n"+data)
def main():
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.bind(('localhost',8812))
    sock.listen(5)
    while True:
        print("the server is waiting for client-connection....")
        connection, address = sock.accept()
        handle_request(connection)
        connection.close()

if __name__ == '__main__':
    main()

一文了解websocket和socket(论点:概念、流程、区别) 🌞websocket和socket,字面意思的差别就是一个web,那么他俩之间到底有什么关系呢,以及区别是啥,接下来带大家详细了解一下。 阅读详情

相关推荐

一看就会之socket的示例与讲解

socket #web框架的本质 import socket #首先需要导入socket包 server_sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #socket.AF_INET : 基于网络 #socket.SOCK_STREAM : 基于 TCP 协议 server_sk.bind((‘127.0.0.1’, 99...

KeShaoDeng的博客 1335

PolynomialSPOJ - POLYNOM

The number of spectators at the FIFA World Cup increases year after year. As you sell the advertisement slots during the games for the coming years, you need to come up with the price a company has to...

blaze_jack 6279

Django 系列 | 第一讲 Web 应用程序的本质

内容提纲1. Web应用的本质是什么?2.自己动手写一个Web框架? 1. Web应用的本质是什么? 我们知道,在互联网时代,当前软件产品的主流形态是Web应用。而所有的Web应用本质上就是一个基于网络编程的程序,这程序包含一个socket服务端,一个socket客户端(及我们用户使用的浏览器)。 2.自己动手写一个Web框架? ...

ry1026的博客 410

高通平台环境搭建,编译,系统引导流程分析

1、高通平台android开发总结 1.1 搭建高通平台环境开发环境 在高通开发板上烧录文件系统 建立高通平台开发环境 高通平台,android和 modem 编译流程分析 高通平台 7620 启动流程分析 qcril 流程分析,设置sim卡锁 python scons 语法学习 Python 语言之 scons 工具流程分析:   1.2 搭建高通平台环境开发环境 高通an

lq50714的专栏 3万+

积分java源码-Polynoms:该项目包括多项式和单体

积分java源码多项式 Polynom 是一个程序,可以对 Polynom 类型的函数执行多项操作。 Poynom 使用类 Monom,该类已预定义有多个函数。 程序使用了一个导入的工程,命名为Graph 这个工程是打印函数图以及点、线……工程位于Graph文件夹中。 功能测试由 Junit 进行,所有功能均经过验证。 测试位于 Tests 文件夹中。 我们在 Polynom 函数上执行多项操作的 Polynom :  Derivate  Add (Several uses)  Multiply  Subtract  Equal two Polynom  Area under the x-axis  Area above the x-axis  Intersection points of the curve with the x-axis  Calculate the Max and Min points 作者 Omer Paz & Shimon Mimoun 内置 Eclipse - 是计算机编程中使用的集成开发环境 (IDE),是使用最广泛的 Java IDE

【原创】Ubuntu20.04 安装 Isaac Gym 仿真器

Ubuntu20.04 安装 Isaac Gym

qq_54900679的博客 3095

Leetcode: NO69 x 的平方根

题目 题目链接:https://leetcode-cn.com/problems/sqrtx 实现 int sqrt(int x) 函数。 计算并返回 x 的平方根,其中 x 是非负整数。 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。 示例 1: 输入: 4 输出: 2 示例 2: 输入: 8 输出: 2 说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。 解题记录 使用api解题 大部分语言都有sqrt函数,直接使用sqrt函数求解在

泛泛之素 1926

LIN总线从入门到精通:低成本汽车通信协议原理与实战

在汽车电子和嵌入式系统中,串行通信协议是实现分布式控制的关键技术。其中,LIN(Local Interconnect Network)总线作为一种专为低成本应用设计的单主多从网络协议,其核心原理在于通过简化的“领导-汇报”通信模式,在满足车身控制、传感器数据采集等场景需求的同时,将硬件与布线成本降至最低。LIN总线采用标准化的帧结构,包含间隔场、同步场和受保护标识符场,并依赖调度表来管理通信时序,确保了网络的确定性与可靠性。其技术价值在于为车窗、座椅、灯光等非安全关键系统提供了高性价比的解决方案,是构建分层

weixin_29185167的博客 261

【Django】Web框架本质

原文:https://blog.youkuaiyun.com/qq_41964425/article/details/82841116 文章目录根据不同的路径返回不同的内容普通版函数版函数进阶版返回具体的HTML文件让网页动态起来服务器和应用程序wsgiref 模块 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客服端。 这样我们就可以自己实现Web...

卖猪肉的痴汉 168

3D视觉革命丨多相机协同拼接技术如何重塑工业检测边界

本文深入探讨了多相机协同拼接技术如何突破单台3D相机的物理局限,实现工业检测从“点面”到“立体”的无死角覆盖。通过拆解系统标定、同步融合等核心技术,并结合锂电池、长轴零件等实战案例,揭示了该技术如何以虚拟“超级视觉传感器”重塑检测边界,提升精度与效率。

weixin_29056865的博客 388

Python、Selenium实现问卷星自动填写(内含适配个人问卷的方法)

使用Python、Selenium实现问卷星自动填写,内含适配个人问卷的方法。

DaenCode的博客 3840

笔记整理:用socket实现Web开发框架流程

笔记整理:用socket实现Web开发框架流程 基础概念 socket: socket是一种通信机制,通过绑定IP地址和端口产生一个通信链,实现计算机之间的通信。网络中不同的计算机之间进行通信必须经过IP地址和端口,为了降低网络通信开发的复杂度,人们在TCP/IP4层结构中的应用层与传输层之间加了一层,这个层就是socket层。它把复杂的TCP/IP进行了封装,并提供了一组服务的接口。 **Web服务:**Web服务本质上是由socket服务端向socket客户端提供HTTP响应,而浏览器就是一个socke

DAO_HUNG的博客 886

深度学习100例-卷积神经网络(CNN)彩色图片分类 | 第2天

文章目录前期工作设置GPU导入数据标准化可视化构建CNN网络编译训练模型预测模型评估 前期工作 设置GPU 如果使用的是CPU可以忽略这步 import tensorflow as tf gpus = tf.config.list_physical_devices("GPU") if gpus: gpu0 = gpus[0] #如果有多个GPU,仅使用第0个GPU tf.config.experimental.set_memory_growth(gpu0, True) #设置GPU显存用量

“365天深度学习训练营”报名进行中~ 7856

web 框架本质

类容(___大纲___):   Web 框架本质   Web 框架本质 web 框架本质:   浏览器: socket 客户端   服务器:socket 服务端  1.Socket 服务端   对于所有的Web应用. 本质上其实就是一个socket服务端. 用户的浏览器其实就是一个socket客户端.   #!/usr/bin/env python # -*...

120

运行后选择GDB/LLDB出现这样的窗口:launch: program ‘输入程序名称,例如 D:\Desktop\新建文件夹\a.exe‘ does not exist...如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 1132

【YOLOv11工业级实战】27. TensorRT量化实战:FP16/INT8极致加速!边缘设备YOLOv11推理速度提升4倍,精度损失控制在1.5%内

摘要:本文针对智慧园区200路摄像头实时分析的工业痛点——RTX 3080单卡仅能处理12路视频流(YOLOv11-nano FP32精度45FPS,需≥120FPS且精度损失≤3%),提供TensorRT量化完整解决方案。从原理解析(FP16/INT8精度差异与量化逻辑)到实操落地(ONNX转换、FP16引擎构建、INT8精细校准),全程给出可复用代码。实测显示:FP16量化后速度达128FPS(×2.8),精度损失0.2%。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1723

python_web应用雏型

python_web应用雏型 Web应用程序顾名思义,就是一种可以通过Web访问的应用程序, Web应用的最大特点是用户只需要有网络和浏览器,不需要再安装其他软件就可顺利通过web访问到程序。 WEB...

qq_29069777的博客 87

Python爬虫实战:如何抓取POI信息(公共场所)位置信息

获取公共场所的信息:如餐厅、商店、医院、景点等。抓取POI的基本信息:如名称、类别、地址、评分等。获取POI的地理坐标:经度和纬度信息。存储POI数据:将抓取到的POI信息存储到本地数据库中。通过本篇文章,我们详细介绍了如何使用Python爬虫抓取POI信息。通过Google Maps API和OpenStreetMap(Overpass API),我们展示了如何获取餐厅、商店、医院等公共场所的位置信息,并进一步探讨了如何处理分页、存储数据以及反爬虫策略。

2201_76125261的博客 380

Python开发【第十四篇】:Web框架本质

Web框架本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #!/usr/bin/env python #coding:ut...

weixin_30569153的博客 80

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

WEB框架的本质

web框架本质 所有的web框架、web请求,本质上都是:socket。 HTTP中,浏览器充当socket客户端,一次请求、一次响应,服务就断开了。 import socket def handle_request(client): buf = client.recv(1024) client.send(b"HTTP/1.1 200 OK\r\n\r...

diesuan4284的博客 134

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Python-Web框架的本质

Web框架的本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端。 这样我们就可以自己实现Web框架了。 Python中使用socket和浏览器进行通信 import socket sk = socket.socket() sk.bind(("127.0.0.1", 80)) sk.listen() whi...

weixin_30778805的博客 140

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

web框架的本质

众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端。 #!/usr/bin/env python #coding:utf-8 import socket def handle_request(client): buf = client.recv(1024) client.send("HTTP/1.1 200...

Mr_huang的博客 142

Web框架本质

目录1、Web框架本质2、自定义Web框架 1、Web框架本质 从本质上来说,所有的web应用,其实就是一个socket服务器,用户使用的浏览器其实就是一个socket客户端。 import socket def handle_request(client): buf = client.recv(1024) client.send("HTTP/1.1 200 OK\r\n\r\n") client.send("Hello, Seven") def main(): sock =

73 243

Web框架

Web框架本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端。 # Author:maira # !/usr/bin/env python # coding:utf-8 import socket def handle_request(client): buf = client.recv(1024) client.send("HTTP/1.1 200 OK\r\n\r\n".encode('utf-8')) cl

weixin_45590490的博客 195

浅谈网站web框架的本质

一、web框架的本质   众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端。 import socket def handle_request(client): buf = client.recv(1024) client.send("HTTP/1.1 200 OK\r\n\r\n") ...

weixin_30672295的博客 94

web框架本质--学Django、flask、tornado框架前必读

Web框架本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端。 上述通过socket来实现了其本质,而对于真实开发中的python web程序来说,一般会分为两部分:服务器程序和应用程序。服务器程序负责对socket服务器进行封装,并在请求到来时,对请求的各种数据进行整理。应用程序则负责具体的逻辑处理。为了方便应用程序的开发,...

行天际的博客 390
上一篇: 协程的概念,协程+遇到IO切换实现单线程提供并发
下一篇: Django ORM 中的单表查询 API(1)
python_198
博客等级 码龄3年 359粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

python_198

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

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

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

打赏作者

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

抵扣说明:

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

余额充值