还能不能愉快地起一个web服务啦?——1st Step!白话http和代码交互的那点儿事儿~

  学写python的时候,我们多多少少都接触到了web程序,然而你有没有想过,当浏览器发送了一个http请求时,等待接收这个请求的后端代码是一种什么样的思想感情?

  就像下面这张图里画的一样,后端也许是一段java代码,也许是php代码,当然,如果代码出自我手,最可能的还是一段python代码。这就好比,当你在社交软件上给一个陌生人发了一条消息,对面这个人可能是英国人、印度人也有可能是一只羊或者一只狗。。。那么问题来了,他们怎么知道你在说啥?当然了,在web服务的世界里没有现实中那么复杂,我们不需要考虑后台接收请求的是一只羊。。。接下来我们就来看看,在url和代码之间到底发生了什么见不得人的事儿~

  

  首先,当我们写了一段代码可以被http访问的时候,我们就建立了一个webserver。从下图中我们不难看出,这就是浏览器和web服务器之间的日常工作,对于服务器来说,要做的5件事情中,只有第3件是根据请求的不同在发生变化的:

  

 

  因此,本着解耦的思想,就有人提出了新的方案,将服务器端反复做的事情独立出来,封装起来,对于程序员来说,我们只需要关注处理请求的部分,有专门的逻辑替我们处理这万年不变的4步,是不是就使得代码简洁了很多?

  然而,当我们这么做之后,服务器和app之间就不再是紧密团结在一起的整体,服务器必须知道要讲接收到的请求、参数以什么方式传达到app端,这就是我们在django中可以使用request.method、request.POST.get等方法的原因——约好了呀,说高大上点儿,这种约定就叫做协议

  

  下图是我们在写django时候经常做的事情,左侧是一个http请求,右侧是python代码,我们只需要在代码里写一个函数,url配一配,就可以使用左侧的url请求到后端的代码,为什么如此顺利,是什么让http和python代码之间的代沟消失了?

   

  

  

  以Django框架为例,Django在这个过程中做了哪些事儿呢?它就是很贴心的把整个服务器要做的事情以及服务器和app交互的过程给封装起来了呀~~~

  这么说起来,Django对我们的代码来说,真是又当爹又当妈的模范家长啊!

  

  当然啦!除了Django之外,python还有很多其他的web框架、模块都做了同样的封装,他们也能对http请求进行分析,并承担起和后台代码交互的重任,然而我们知道人与人之间即便是交流同样的事情也有很多种不同的表达方式,因此,我们说,虽然同样是做http和代码的交互工作,但对协议的定义可能不尽相同。

  下面列举一些常见的 Python HTTP 服务器,以及它们目前的大致发展情况,以便用户的对比选择:

Name Version http 1.1 Flavour Repo. Community
Gunicorn 0.6.4 No processor/thread GIT #gunicorn
uWSGI Trunk (253) Yes processor/thread repo Mailing List
FAPWS3 0.3.1 No processor/thread GIT Google Groups
Aspen 0.8 No processor/thread SVN Google Groups
Mod_WSGI 3.1 Yes processor/thread SVN Google Groups
wsgiref Py 2.6.4 No processor/thread SVN Mailing List
CherryPy 3.1.2 Yes processor/thread SVN Planet, IRC
Magnum Py 0.2 No processor/thread SVN Google Groups
Twisted 10.0.0 Yes processor/thread SVN Community
Cogen 0.2.1 Yes callback/generator SVN Google Groups
GEvent 0.12.2 Yes lightweight threads Mercurial Google Groups
Tornado 0.2 Yes callback/generator GIT Google Groups
Eventlet 0.9.6 Yes lightweight threads Mercurial Mailinglist
Concurrence tip Yes lightweight threads GIT Google Groups

参考:http://www.nowamagic.net/academy/detail/1330308

时间: 2024-10-05 02:38:17

还能不能愉快地起一个web服务啦?——1st Step!白话http和代码交互的那点儿事儿~的相关文章

搭建一个web服务下载HDFS的文件

需求描述 为了能方便快速的获取HDFS中的文件,简单的搭建一个web服务提供下载很方便快速,而且在web服务器端不留临时文件,只做stream中转,效率相当高! 使用的框架是SpringMVC+HDFS API 关键代码 @Controller @RequestMapping("/file") public class FileDownloadController { private static final String BASE_DIR = "/user/app/dump

Tornado 高并发源码分析之一---启动一个web服务

前言: 启动一个tornado 服务器基本代码 1 class HomeHandler(tornado.web.RequestHandler): #创建 RequesHandler 对象,处理接收到的 http 请求 2 def get(self): 3 entries = self.db.query("SELECT * FROM entries ORDER BY published DESC LIMIT 5") 4 if not entries: 5 self.redirect(&q

在 SQL Server 的存储过程中调用 Web 服务

介绍 一个老朋友计划开发一个应用,基于 .NET 和 Socket,但需要在存储过程中调用 Web 服务. 在这篇文章中我们将分享这个应用的经验,讲述如何在存储过程中调用 Web 服务,并传递参数. Step 1 首先我们在 Visual Studio 中创建一个 Web 服务项目: Step 2 接下来在服务中添加我们需要的方法,在这里我们创建 6 个方法,分别是 Greet (string Param1) ,HelloWord() , Add, subtract, 和 Divide (Num

python web编程 创建一个web服务器

这里就介绍几个底层的用于创建web服务器的模块,其中最为主要的就是BaseHTTPServer,很多框架和web服务器就是在他们的基础上创建的 基础知识 要建立一个Web 服务,一个基本的服务器和一个“处理器”是必备的. 基础的(Web)服务器是一个必备的模具.它的角色是在客户端和服务器端完成必要HTTP 交互.在BaseHTTPServer 模块中你可以找到一个名叫HTTPServer 的服务器基本类. 处理器是一些处理主要“Web 服务”的简单软件.它们处理客户端的请求,并返回适当的文件,静

搭建一个java web服务端

最近也是做了一个简单的java web 项目,由于以前也是没接触过,在这里记录下搭建一个web服务端的过程. 一般我们做一个服务端要么在本地自己的电脑上先安装环境,一般是windows系统,主要安装jdk + tomcat + mysql,这些安装教程网上都有,也很简单,我这里就不多说了,我要讲的是在一个远程linux服务器上搭建web服务端环境. 对于一个liunx服务器,我们可以使用xshell等终端工具登录来操作远程服务器,使用xshell的好处是,我们可以使用rz ,sz命令上传上载文件

基于gin框架搭建的一个简单的web服务

刚把go编程基础知识学习完了,学习的时间很短,可能还有的没有完全吸收.不过还是在项目中发现知识,然后在去回顾已学的知识,现在利用gin这个web框架做一个简单的CRUD操作. 1.Go Web框架的技术选型 Top 6 web frameworks for Go as of 2017,可以看看这个go语言中Web框架的对比和老大的推荐,我选择gin框架作为学习go语言的框架. image.png 2.Gin介绍 gin框架的中文文档,这个文档相当好,清晰明了解释gin框架的整个用法.下面是gin

利用jws发布一个查询员工信息的Web服务(员工信息存储在数据库中)

这是<基于服务的软件系统>的课程设计: 一.作业要求 编写查询员工信息的Web服务(员工信息存储在数据库中).第一个Web服务:输入员工号,返回该员工号的员工的基本信息,包括员工号.员工名称.所在部门.出生日期.职位.职称.入职日期等信息.第二个Web服务:输入部门.职称,返回该部门具有该职称的所有员工的基本信息,员工基本信息与上面相同.分别针对上述两个Web服务,分别编写调用这两个Web服务的程序(或网页).要求在输入界面上输入待查询数据,调用Web服务,并将Web服务返回的员工信息查询结果

spring boot 用maven搭建第一个RESTful Web 服务

spring boot的出现就是为了简化spring项目的构建,让你尽快的上手一个spring项目,并快速的生成一个可执行的spring微服务. 让我们来看看多简单,这里我们直接用spring的IDE,Spring Tool Suite,建第一个restful web服务. 1.在工作空间的右键,直接新建一个spring start project 2.选择构建spring boot 项目的工具,这里我们用maven 3.填好相关空格之后,选择你想构建的spring boot demo项目,这里

java中发布一个webService服务到服务器

Java在编码完成webService服务端后,可以通过运行一个main方法来发布webService服务,但是实际将服务部署到服务器上后,肯定不能还运行main方法,所以我们需要在启动服务器的时候就发布服务.并且在服务器的生命周期内一直运行. main方法发布服务(可用于测试类) public static void main(String[] args) { Endpoint.publish("http://172.18.100.52:9090/medical", new Medi