Django 学习笔记-1 socket 和 WSGI

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'

Hello, world!

'] 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'

Hello, world!

'] def hello(): return [b'

Hello!

'] def world(): return [b'

World!

'] 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'

404, Page Not Found!

'] def main(): my_server = make_server('localhost', 8000, app) my_server.serve_forever() if __name__ == '__main__': main()

你可能感兴趣的:(Django 学习笔记-1 socket 和 WSGI)