1. wsgi 是python的特有规范, 与java的servlet规范一样, java特有
搞这个规范干嘛呢:
简单socket:
执行下面代码, 在浏览器里面执行:http://localhost:8001/, 我们可以看到hello
打印信息如下:
GET / HTTP/1.1
Host: localhost:8001
Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0
.8
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like
Gecko) Chrome/40.0.2214.91 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8
recv from ('127.0.0.1', 51045)
GET /favicon.ico HTTP/1.1
Host: localhost:8001
Connection: keep-alive
Accept: */*
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like
Gecko) Chrome/40.0.2214.91 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8
#coding=utf8
import socket
so = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
so.bind(('', 8001))
so.listen(1)
while True:
conn, addr = so.accept()
print "recv from ", addr
msg = ''
while True:
buff = conn.recv(1024)
if not buff: break
if len(buff) < 1024:
msg += buff
break
msg += buff
print msg
conn.send("hello")
conn.close()
参考下点击打开链接
源码里面的一个例子:
def demo_app(environ,start_response):
from StringIO import StringIO
stdout = StringIO()
print >>stdout, "Hello world!"
print >>stdout
h = environ.items(); h.sort()
for k,v in h:
print >>stdout, k,'=', repr(v)
start_response("200 OK", [('Content-Type','text/plain')])
return [stdout.getvalue()]
httpd = make_server('localhost', 8002, demo_app)
httpd.serve_forever() # 使用select
make_server是不是很眼熟, 没错:
make_server(host, port, app, server_class=<class wsgiref.simple_server.WSGIServer>, handler_class=<class wsgiref.simple_server.WSGIRequestHandler>)
与我们之前写的scoket多了一个回调方法而已.
再看源码:
def make_server(
host, port, app, server_class=WSGIServe