web服务器理解和重要性

认识web服务器?

        我们作为程序员在pycharm中开发的AI项目,项目开发好了,只能在自己电脑运行成功,但是如何供各地的每个用户使用?

        这就像百度一样,客户在浏览器通过www.baidu.com就能获取百度资源。是因为客户在输入完网址之后点击确定,这就相当于发送了信息给百度的服务器,服务器识别这个信息请求,觉得合法就拿到自己仓库里的数据打包封装好,返回给客户,客户这边的浏览器解析,就能将这些数据可视化到页面。

        客户端和服务器之间互动的整个过程就相当于UU跑腿。客户A即客户端,客户B即服务端。客户A向客户B寻求东西,客户A首先要告诉跑腿小哥客户B的地址,然后告诉客户B的门牌号,此时跑腿地址相当于IP地址,门牌号相当于端口号。知道这些跑腿小哥就能找上门拿东西了。当跑腿小哥来了,就把客户A的话传给客户B,客户B分析之后觉得真实可靠,就把客户A想要的东西找出来打包,给跑腿小哥带回去,客户A收到包裹后,就拆包,就能看到想要的东西了。

        同样我们把它做成服务器,远程用户通过网络发送信息给服务器,服务器收到信息并分析,没问题就把AI项目内容通过网络发回给用户。网络作为一个桥梁,它规定了http协议,来往的信息都要封装打包成http形式,两边接到包裹之后拆解解析即可。

客户端和服务器之间互动整个流程。

客户端:

  1. 创建socket套接字

        相当于启动跑腿服务。python直接掉包解决import socket

     2.和服务端建立连接

        此时要知道服务端的IP地址+端口号。访问百度就是,为了方便访问用户记忆和使用,把IP地址:192.168.127.1转换成了域名 www.baidu.com。域名就是IP地址的别名。端口号在浏览器开发者 工具中的GET/POST请求中封装,百度默认8000。

      3. 发送数据,接受数据

        python的包里方法,直接使用。如socket.connect()、socket.send()、socket.recv()

      4. 关闭客户端socket

        Socket.close()

服务端:(以下所有操作步骤都是python包的方法封装好了,直接用就行)

  1. 创建服务端的socket

        创建的socket是服务端的,要在服务端处理客户端的信息,需要重 新创建新的new_socket。此外如果客户端太多,需要基于new_socket 为主线程,创建子线程,每当一个客户端进来时就需要new_socket 创建一个子 线程,还要设置守护子线程,即主线程退出时,子线程 也要跟着退出,不然不合理

      2. 绑定端口号和地址

        地址不要唯一,因为服务器的物理地址和网络地址有很多,方便用户多种地址定位到同一地方服务器,比如访问百度服务器地址上海市浦东新区纳贤路701号也可以是中国上海市浦东新区纳贤路701号。端口号要设定,端口号分为知名端口号和动态端口号。知名端口号指众所周知的端口号,范围从0-1023,比如21端口分配给FTP(文件传输=协议)服务,25端口号分配给SMTP(简单邮件服务)服务,80端口分配给HTTP服务。动态端口号一般程序员开发应用程序使用端口号,范围1024-65535。

      3. 设置监听

        当知道服务器地址和端口号之后,成千上万的用户能同时访问服务 器,这样就需要设置等待容量。

      4. 等待接受客户端的连接请求

      5. 接受数据,并返回数据

        发送数据给客户端时,主要要模拟构造response响应报文形式即可

      6. 关闭服务端socket套接字

        一般不需要关闭,因为是服务端需要源源不断的给予不同客户端资源

细节:

        1.清楚http协议的GET/POST请求报文和response响应报文的格式。方便开发服务器端程序时,解析请求报文,拿到请求的指定网址等信息。构造response响应报文返回客户端。

       请求和响应报文

        2. 知道进程和线程区别

        打开酷狗APP就相当于打开进程,听音乐和下载音乐等多项操作就相当于线程

        3. TCP协议是什么?

        客户端和服务端传输是约定的协议,该协议可以让传输信息可靠,如:TCP采用发送应答机制,超时重传,错误校验,流量控制等。保证信息传输合理性。

        4. Send方法和recv方法的原理。

        客户端socket先将数据发送的发送缓冲区,操作系统从中拿到数据,通过网络发给知道地址的接收缓冲区,再由服务端获取数据。

        5. Response响应报文发送到网络,一定要统一编码格式为utf-8。我们编码所构造的报文格式要从字符串转换成二进制,即utf-8。

        6. 优化:做成面向对象格式,将服务器封装成类,此外加入sys库,程序员能直接在终端使用命令行传参数,就能开启服务器

如有错误,请批评指正! 

猜你喜欢

转载自blog.csdn.net/weixin_46412999/article/details/128176990