'''

通过wsgiref写一个web服务端
先讲讲wsgiref吧,基于网络通信其根本就是基于socket,
所以wsgiref同样也是通过对socket进行封装,避免写过
多的代码,将一系列的操作封装成一个方法(函数),这样大大减少代码量

'''

from wsgiref.simple_server import make_server

def index(env):
return 'index' def see_time(env):
return 'time' def user(env):
return 'user' urls = [
('/index', index),
('/time', see_time),
('/user', user),
]
# 这里我们通过路由的方式,一个url对应一个视图函数,在那个视图函数中我们可以写一系列的逻辑代码 def run(env, response):
response("200 OK", [('Content-type', 'text/html')])
# env是浏览器请求带来的数据,进行一些列处理得到的字典,通过字典得到它请求的url
# 我们再通过url进行判断,并返回其相应的页面
position = env['PATH_INFO']
function = None
for url in urls:
if url[0] == position:
function = url[1]
break
if function:
info = function(env)
else:
info = '' return [info.encode('utf-8')] if __name__ == '__main__':
server = make_server('127.0.0.1', 8008, run)
print('8008端口监听。。。')
server.serve_forever() # 让服务器永远启动
'''
make_server这是一个函数,虽然看了一点点源码,但还是不太懂,但是大概的意思应该是
make_server('127.0.0.1', 8008, run),前两个端口,它帮我们绑定了服务端的ip端
口,然后就是再那里等待客户端去连接,当有客户端连接的时候,将客户端请求带来的数据,
进行一些列的处理(处理方法大概和上一篇socket处理字符串的方法一样吧,也有不同的),
得到一个数据字典当作参数传入第三个参数(run函数),然后将一个对象的方法当作参数作为
第二个参数传入。
第二个参数的作用大概是就是首先发送(上一篇socket.send('HTTP/1.1 200 ok\r\n\r\n''))
效果一样的代码。 '''
# 这个相对于上一篇我写的简单了许多,但也要理解make_server是怎么运行的,虽然看不懂源码,
# 但可以通过实现效果反推测出它怎么运行的,还要理解run函数中的两个参数。 # 如果你还想再添加访问的页面,首先你要在url中添加url和对应的视图函数。
# 再去写视图函数,下面的代码不用去动

wsgiref手写一个web服务端的更多相关文章

  1. 手写一个Web服务器,极简版Tomcat

    网络传输是通过遵守HTTP协议的数据格式来传输的. HTTP协议是由标准化组织W3C(World Wide Web Consortium,万维网联盟)和IETF(Internet Engineerin ...

  2. Tomcat源码分析 (一)----- 手写一个web服务器

    作为后端开发人员,在实际的工作中我们会非常高频地使用到web服务器.而tomcat作为web服务器领域中举足轻重的一个web框架,又是不能不学习和了解的. tomcat其实是一个web框架,那么其内部 ...

  3. 手写一个最迷你的Web服务器

    今天我们就仿照Tomcat服务器来手写一个最简单最迷你版的web服务器,仅供学习交流. 1. 在你windows系统盘的F盘下,创建一个文件夹webroot,用来存放前端代码.  2. 代码介绍: ( ...

  4. Delphi XE5通过WebService开发Web服务端和手机客户端

    Delphi XE5通过WebService开发Web服务端和手机客户端介绍 我们开发一个三层的android程序 建立一个webservices  stand-alone vcl applicati ...

  5. 适合新手:从零开发一个IM服务端(基于Netty,有完整源码)

    本文由“yuanrw”分享,博客:juejin.im/user/5cefab8451882510eb758606,收录时内容有改动和修订. 0.引言 站长提示:本文适合IM新手阅读,但最好有一定的网络 ...

  6. 关于如何提高Web服务端并发效率的异步编程技术

    最近我研究技术的一个重点是java的多线程开发,在我早期学习java的时候,很多书上把java的多线程开发标榜为简单易用,这个简单易用是以C语言作为参照的,不过我也没有使用过C语言开发过多线程,我只知 ...

  7. 如何提高Web服务端并发效率的异步编程技术

    作为一名web工程师都希望自己做的web应用能被越来越多的人使用,如果我们所做的web应用随着用户的增多而宕机了,那么越来越多的人就会变得越来越少了,为了让我们的web应用能有更多人使用,我们就得提升 ...

  8. Web服务端性能提升实践

    随着互联网的不断发展,日常生活中越来越多的需求通过网络来实现,从衣食住行到金融教育,从口袋到身份,人们无时无刻不依赖着网络,而且越来越多的人通过网络来完成自己的需求. 作为直接面对来自客户请求的Web ...

  9. 手写一个简单的ElasticSearch SQL转换器(一)

    一.前言 之前有个需求,是使ElasticSearch支持使用SQL进行简单查询,较新版本的ES已经支持该特性(不过貌似还是实验性质的?) ,而且git上也有elasticsearch-sql 插件, ...

随机推荐

  1. 学习安卓开发过程中遇到关于R.Java文件的问题

    在学习安卓开发过程时,遇到R.java生成问题,总结几个方法解决. 1.首先必须做的就是检查代码的正确性,存在错误的代码,不编译生成R.java 2.右键点项目,选择 Android Tools -& ...

  2. 一分钟学会Git操作流程

    今天整理下公司操作git 流程,尽量用最最简洁的方式整理出来,方便以后有新来的同事学习使用. 我整理的这个Git操作,基本上只需要一分钟,就可以轻松上手啦!!! 一. 拉取提交操作 1.拉取远程代码 ...

  3. [Linq To Sql]解决join时的Collation冲突

    背景 现在两表 A:

  4. Java中使用MongoUtils对mongodb数据库进行增、删、查、改

    本文主要介绍在java应用中如何使用MongoUtils工具类对 mongodb进行增.删.查.改操作. 一.配置 1.将 common.jar库引入到项目环境中: (源代码:https://gite ...

  5. 【学习笔记】HTML基础:列表、表格与媒体元素

    一.列表是信息资源的一种展现形式,它可以使信息结构化和条理化,并以列表的样式显示出来,以便浏览者能够快速的获取相应的信息. 1.无需列表 <ul> <li>第一项</li ...

  6. 移除script标签引起的兼容性问题

    一.应用场景: 有时候我们需要动态创建script标签实现脚本的按需加载,我们会为script标签绑定onload或者onreadystatechange事件,用于检测动态脚本是否加载并执行完毕,在事 ...

  7. Dozer 实现对象间属性复制

    使用场景:两个领域之间对象转换. 比如:在系统分层解耦过程中, 对外facade接口,一般使用VO对象,而内core业务逻辑层或者数据层通常使用Entity实体. VO对象 package com.m ...

  8. Iscrool下拉刷新

    简易下拉刷新 css样式: *{ margin: 0px; padding: 0px; } #wrapper{ width: 100%; height: 150px; border: 1px soli ...

  9. Arcgis flex 切片地图麻点

    在arcgis server中发布地图切片完成后,有时候在访问地图的时候会出现很多麻点, 其实是你切片的时候没有注意到一些选项.... 默认的切片是PNG8,说到这可能就明白了吧,png8的色彩范围: ...

  10. cocos2d-x3.1 下实现相似Android下ExpandListView的效果

    在左Android開始有SDK提供ExpandListView的可扩展列表,而在iOS下有很多第三方做好的Demo,这里我是參照iOS下RATreeView这个第三方库实现的. 本文代码:须要在3.1 ...