【re:从零开始的网站搭建教程】#1-基础知识
#引言
均为我个人经验,且都由我个人编写完成,如有错误请见谅。
本文将讲解用原生python编写web服务、基础的网络连接、http协议、以及html+js+css前端语言,而不会使用现成的web框架、建站脚本。也会提及本人之前遇到的问题和一些坑。我们的最终目标是用这些知识搭建一个完整的论坛。
——阅读本文需要有一定的计算机知识。若能使用python最好,在代码演示的时候会用到。
推荐python教程:
【Python教程 - 廖雪峰的官方网站】https://www.liaoxuefeng.com/wiki/1016959663602400
#http基础
我们浏览网页,与web服务器通信建立在tcp/ip协议之上。不过这并非我们的重点,我们不需要了解tcp连接具体是如何建立的,只用知道于访问网站需要tcp/ip协议。而真正的重点是http协议,我们需要了解在http协议下访问一个网站的流程。

是非常简单的一去一来,http协议规定我们访问网站都要遵循这个流程。要注意的是虽然tcp协议允许了服务器和客户端之间数据双向自由传输,但是http协议规定连接只能由客户端也就是用户这边的浏览器发起,服务器只能根据客户端发送的数据进行响应,并且当服务器发送完信息后会立即关闭连接。
#socket、ip与端口
1.socket
socket即套接字,在编程语言中是对网络连接的抽象。通过操控socket对象可以对网络连接进行各种操作。
2.ip
ip是网络上的一个地址,有公网ip与内网ip之分,简单来说的话公网ip是能在互联网上访问的ip,而内网ip只能在局域网中访问,家庭网络中大多是以192.168开头的内网ip。
由于目前的ipv4的ip地址有限,最多也就只有256^4个(0.0.0.0~255.255.255.255),给每个设备都绑定ipv4地址是不现实的,我们平时使用的都是动态ip,这也是服务器没办法主动请求的原因。
在cmd中使用
即可查看自己当前的本地ip地址。

另外,在搜索引擎中输入ip就可已查询本机当前在外网上的ip地址。
当然如果非要连网才能编写的话未免也过于麻烦,我们可以使用ipv4环回来解决这个问题。ipv4环回是一个特殊的ip,其地址为127.0.0.1。通过这个地址我们可以让主机给自身发送数据。
3.端口
而端口则代表这个地址上的众多出入口。端口一共有65536个(即2^16),很多网络协议都会有固定端口,http协议一般使用80端口。
#python TCP网络编程与多线程
1.TCP网络编程
使用python自带socket模块来进行tcp网络编程
s就是我们的一个新的socket对象了,AF_INET表示使用ipv4,要使用ipv6的话用AF_INET6就可以了。SOCK_STREAM表示使用面向流的TCP协议。
接下来就是对s进行各种操作。
如果作为客户端的话就比较简单,就只需要连接,然后发送、接受数据,最后关闭就行了
服务端会稍微复杂一点,服务端需要监听客户端的请求、接收发送数据,并且还要能同时和多个客户端进行连接。
2.多线程
要同时完成几个任务就需要用到多线程,虽然python因为GIL锁的原因不能很好的利用多核cpu,但由于web是io密集型,对计算的要求相对来说不是非常大,在这种情况下python的多线程还是很好用的。
用来个简单的客户端与服务端的通信示例
服务端:
客户端:
效果是这样的


下一节就真正开始讲web框架的编写。

