1. 用 socket
实现一个简单的 Web 服务器
#! python3
import socket
def main():
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 开启socket
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # 清除IP和端口占用
sock.bind(('localhost', 8000)) # 绑定IP和端口到套接字
sock.listen(3) # 监听,5表示客户端最大连接数
while True:
conn, addr = sock.accept()
data = conn.recv(1024) # 接收数据大小为1024字节
print(data)
conn.send(b'HTTP/1.1 200 OK\r\nContent-Type:text/html; charset=utf-8\r\n\r\n')
conn.send('Hello, World!'.encode('utf-8'))
conn.close()
if __name__ == "__main__":
main()
2. 用 wsgiref
实现一个简单的 Web 服务器
wsgiref
是 WSGI 规范的范例实现,而 WSGI(Python Web Server Gateway Interface ) 即 Web服务器网关接口,是为 Python 语言定义的 Web 服务器和 Web 应用程序或框架之间的一种简单而通用的接口。
#! python3
from wsgiref.simple_server import make_server
def app(environ, start_response):
start_response('200 OK', [('Content-Type', 'text/html')])
return [b'<h1>Hello, world!</h1>']
def main():
my_server = make_server('localhost', 8000, app)
my_server.serve_forever()
if __name__ == '__main__':
main()
2.1 增加支持多路由功能
#! python3
from wsgiref.simple_server import make_server
def index():
return [b'<h1>Hello, world!</h1>']
def hello():
return [b'<h1>Hello!</h1>']
def world():
return [b'<h1>World!</h1>']
urls = {
'/': index,
'/hello': hello,
'/world': world
}
def app(environ, start_response):
request_url = environ.get('PATH_INFO')
if request_url in urls:
start_response('200 OK', [('Content-Type', 'text/html')])
return urls[request_url]()
else:
start_response('404 NOT FOUND', [('Content-Type', 'text/html')])
return [b'<h1>404, Page Not Found!</h1>']
def main():
my_server = make_server('localhost', 8000, app)
my_server.serve_forever()
if __name__ == '__main__':
main()
网友评论