774181884
035-628505611
导航

从零实现小我私家HTTP服务器

发布日期:2022-07-25 06:04

本文摘要:几个月没写教程了,今天登录看一下,账号还没被封,兴奋之余写个http服务器demo。http超文本传输协议,是互联网上应用最广泛的网络协议。它是应用层的协议,底层是基于TCP通信的。 HTTP协议的事情历程:客户通过浏览器向服务器发送文档请求,浏览器将请求的资源回应给浏览器,然后关闭毗连。即:毗连-请求-响应-关闭毗连。我们基于http1.1版本编写,因为从零搭建的,所以我决议接纳python写,固然我小我私家是搞java和python开发的,至于为啥不用java。

太阳成集团tyc234cc

几个月没写教程了,今天登录看一下,账号还没被封,兴奋之余写个http服务器demo。http超文本传输协议,是互联网上应用最广泛的网络协议。它是应用层的协议,底层是基于TCP通信的。

HTTP协议的事情历程:客户通过浏览器向服务器发送文档请求,浏览器将请求的资源回应给浏览器,然后关闭毗连。即:毗连->请求->响应->关闭毗连。我们基于http1.1版本编写,因为从零搭建的,所以我决议接纳python写,固然我小我私家是搞java和python开发的,至于为啥不用java。

因为java写太贫苦。可是原理都一样,又不是汇编,有编程基础的人应该都懂。

关于tcp协议的三次握手和四次挥手,不先容了,网上有太多详细的教程关于线程,历程,协程,正则表达式,文件读写等等也不先容了,这些基本的工具,自己弄懂后再看,否则我一个个讲清楚,得写好长好长。需要注意的代码前,我也有好好写注释,要是感受我没说清楚的可以自己根据我的代码,自己试一下就懂了。纸上得来终觉浅,绝知此事要躬行1.建立服务器套接字,并设定相关的参数1.1关于bind()这个方法,ip地址不写,默认也就是当地环回地址127.0.0.11.2关于setsockopt()方法是为了防止,服务器先关闭,服务器当地资源暂存,导致address占用的问题。

泛起这个问题,和tcp四次挥手原理有关。固然实际中都是客户端先关闭2.服务器吸收来自浏览器参数(示例中使用了多历程,线程,协程示例)2.1client_service(client_socket)这个方法是用来处置惩罚服务器响应得2.1因为tcp.accept()方法默认是堵塞的,所以我们必须使用循环加多线程解决这个问题2.2使用多历程建立得时候,套接字必须关闭两次(其中一次在client_service方法内部关闭),可是建立多历程会复制法式所有的资源,所以套接字存在两个。如果想详细指导要关两次,就得学习下Linux中文件硬链接这个观点了。3.获取浏览器请求数据3.1正则表达式部门是为了匹配请求头中详细的页面名称 如:GET /index.html HTTP/1.1。

太阳成集团tyc234cc

ret.group(1)这个是为了获取index.html。4.响应数据给浏览器4.1关于响应头和响应体也可以拼接成一个新的字符串一起返回给浏览器,我这样写是为了让大家看得更清楚。

其中读取某个html页面,页面没啥内容 只是为了看到效果就好运行编写的法式,然后使用浏览器会见测试乐成一般来说在实际开发中,历程占用资源最大,历程次之,协程最小。上面示例我们使用的是协程,虽然说资源最小,可是还是有革新空间。好比说,使用单历程,单线程,非堵塞的方式实现服务器的并发(关于并发和并行的观点,不明白自己查阅相关资料吧)代码改动得地方只有服务器接受请求数据得地方,关于响应无需改动。

因为代码比力简朴,我就不详细论述了。详细的逻辑,tcp.accept默认会堵塞,挪用tcp.setblocking(False)设置非堵塞,当服务器未接受到数据时,就会发生异常,我们只要捕捉这个异常。将正常的套接字添加到一个新建的列表中(Java称为数组),然后遍历这个列表,循环取出数据即可为了区别,新的demo端口接纳12345 测试如下:这样单历程,线程,非堵塞的方式服务器的并发,资源占用最小。

固然另有一种类似,设置比这种方式好太多的方法epollnginx就是基于epoll原理写的,像海内大型的互联网公司如百度,阿里京东等,他们的服务器虽然都是自家的,可是都是基于nginx编写的。因为epoll只运行在linux系统上,所以我只能写一个epoll 的demo给大家看一下,看成相识。原理类似上一个。

这个工具已经比力深入,一两句话说不清粗,大家可以先去看下epoll的教程,然后参照我的demo多试试,就应该可以明白了。实际开发中也不会让你手写服务器。否则apache否则早就回家种地了很久不写这个了,一般都是在github上直接上传源码,一起交流的,写这个自己都以为有些没说清楚,见谅。

可是大要的流程就这样。刚入门的小同伴不要纠结后面的,能写出第一个demo就够了,否则头皮发麻。

em.....就这些了吧。有空的话,教大家谢谢爬虫,搞搞有意思的工具。bye。


本文关键词:从,零,实现,小我,私家,HTTP,服务器,几个月,太阳成集团tyc234cc

本文来源:太阳成集团tyc234cc-www.vwelevator.com