用Python手动实现一个简单的服务器,不借助任何框架在浏览器中输出任意内容

前言

嗨喽~大家好呀,这里是魔王呐 ❤ ~!

在公司网站开发中,我们往往借助于Flask、Django等网站开发框架去提高网站开发效率。

那么在面试后端开发工程师的时候,面试官可能就会问到网站开发的底层原理是什么?

=

我们不止仅仅会使用框架开发,还需要知其所以然

今天领大家不借助任何框架的基础上手动搭建一个资料查找网站

主要内容

  1. TCP网络模型

  2. 正则表达式匹配资源

  3. 如何编写一个tcp server服务端

python资料、源码、教程\福利皆: 点击此处跳转文末名片获取

开始我们的代码,先是导入模块

如何实现一个静态的服务器呢? 可以使用Python自带的一个通讯模型:socket

python中内置的网络模型库 tcp / udp

import socket

为浏览器发送数据的函数

  1. 当浏览器链接到网站服务器的时候
def service_client(new_socket):
    request = new_socket.recv(1024)
    print(request)
  1. 向浏览器发送http数据

如果浏览器在接收完http协议数据之后遇到了换行,自动将下面的数据转成网站内容body中去

response = 'HTTP/1.1 200 OK \r\n'
response += '\r\n'
# 构建你想要显示的数据内容
response += 'hello world'
  1. 浏览器接受到的数据是由编码集的,所以我们需要对字符串进行一次编码
 new_socket.send(response.encode('utf-8'))
  1. 当服务完浏览器之后,需要释放系统资源
new_socket.close()

创建一个执行函数

  1. 创建一个tcp套接字

socket模块需要两个参数 网络协议(pc ipv4 ipv6) 模型类型

def main():
    tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

我们操作系统内部有65535个服务端口,当一个程序运行的时候[进程] 占用一个端口
浏览器软件运行占用的端口:80
文件上传端口:22
网站指定端口:443

端口是有限的,当程序完成任务之后一定要释放端口 刷新资源

  1. 当网站服务中断时 需要立即释放端口
tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  1. 绑定本机信息
tcp_server_socket.bind(('', 80))

通过浏览器去访问网站资源 [数据 html css JavaScript 静态文件(图片 音频)]

需要让浏览器首先能找到这台电脑 ip 才可以访问这台电脑的数据资源

需要绑定电脑的ip地址

  1. 将网站服务设置成监听模式

等待浏览器链接

tcp_server_socket.listen(128)

网站服务

while True:
    '''
    new_socket 负责向浏览器发送数据的
    client_addr 记录当前链接电脑的信息(ip port) 
    '''
    new_socket, client_addr = tcp_server_socket.accept()
    service_client(new_socket)
    # 使用new_socket向浏览器发送数据

启动程序

if __name__ == "__main__":
    main()

运行代码

出现乱码,可以把utf-8改为GBK

尾语

感谢你观看我的文章呐~本次航班到这里就结束啦 🛬

希望本篇文章有对你带来帮助 🎉,有学习到一点知识~

躲起来的星星🍥也在努力发光,你也要努力加油(让我们一起努力叭)。

最后,宣传一下呀~👇👇👇更多源码、资料、素材、解答、交流皆点击下方名片获取呀👇👇

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值