Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk melaksanakan pelayan web mudah menggunakan Python

Bagaimana untuk melaksanakan pelayan web mudah menggunakan Python

WBOY
WBOYke hadapan
2023-05-04 14:19:064654semak imbas

1. Pengenalan

Kami akan membahagikan kandungan artikel ini kepada bahagian berikut:

2 Pelayan web: Program yang bertanggungjawab untuk memproses permintaan HTTP klien dan membalas respons.

  1. Permintaan HTTP: permintaan yang dihantar oleh klien (seperti penyemak imbas) ke pelayan, termasuk kaedah permintaan, URL, pengepala permintaan dan maklumat lain.

  2. Respons HTTP: Data yang dikembalikan oleh pelayan kepada klien, termasuk kod status, pengepala respons, badan respons dan maklumat lain.

  3. 3 Pustaka pengaturcaraan rangkaian Python

pustaka soket: salah satu perpustakaan standard Python, menyediakan fungsi komunikasi rangkaian asas, termasuk mencipta Socket, bind alamat, port mendengar dan operasi lain.

  1. Pustaka http.server: salah satu perpustakaan standard Python, menyediakan fungsi pelayan HTTP asas.

  2. 4. Melaksanakan pelayan web ringkas

  3. 1.
import socket
 
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

2. Ikat alamat IP pelayan dan port.

server.bind(("127.0.0.1", 8080))

3.

server.listen(5)

4. Terima sambungan pelanggan dan proses permintaan.

while True:
    client_socket, client_address = server.accept()
    # 处理客户端请求

5. Memproses permintaan HTTP

1.

request_data = client_socket.recv(1024).decode("utf-8")

2. Huraikan baris permintaan (kaedah permintaan, URL, versi HTTP).

request_lines = request_data.split("\r\n")
request_line = request_lines[0]
method, url, http_version = request_line.split(" ")

6. Kembalikan fail statik

1. Baca kandungan fail mengikut URL permintaan.

import os
 
def read_file(file_path):
    if not os.path.exists(file_path):
        return None
 
    with open(file_path, "rb") as f:
        content = f.read()
    return content
 
file_path = "www" + url
file_content = read_file(file_path)

2. Bina respons HTTP berdasarkan kandungan fail.

if file_content is not None:
    response_line = "HTTP/1.1 200 OK\r\n"
    response_body = file_content
else:
    response_line = "HTTP/1.1 404 Not Found\r\n"
    response_body = b"<h2>404 Not Found</h2>"

7. Pengujian dan pengoptimuman

Jalankan pelayan web yang ringkas.

if __name__ == "__main__":
    main()

Gunakan penyemak imbas anda untuk melawati http://127.0.0.1:8080 untuk menguji.

8 Ringkasan dan pengembangan

Artikel ini membantu pembaca memahami konsep dan teknik asas pengaturcaraan rangkaian Python dengan melaksanakan versi ringkas pelayan web. Walaupun pelayan web ini mudah, ia menyediakan asas untuk kajian lanjut pembangunan web dan pengaturcaraan rangkaian. Dalam aplikasi praktikal, anda boleh cuba melaksanakan fungsi yang lebih kompleks, seperti penjanaan halaman dinamik, sambungan pangkalan data, keselamatan, dsb.

Kod lengkap pelayan Web ringkas:

import socket
import os
 
def read_file(file_path):
    if not os.path.exists(file_path):
        return None
 
    with open(file_path, "rb") as f:
        content = f.read()
    return content
 
def main():
    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server.bind(("127.0.0.1", 8080))
    server.listen(5)
 
    while True:
        client_socket, client_address = server.accept()
        request_data = client_socket.recv(1024).decode("utf-8")
        request_lines = request_data.split("\r\n")
        request_line = request_lines[0]
        method, url, http_version = request_line.split(" ")
 
        file_path = "www" + url
        file_content = read_file(file_path)
 
        if file_content is not None:
            response_line = "HTTP/1.1 200 OK\r\n"
            response_body = file_content
        else:
            response_line = "HTTP/1.1 404 Not Found\r\n"
            response_body = b"

404 Not Found

" client_socket.send(response_line.encode("utf-8")) client_socket.send(b"Content-Type: text/html\r\n") client_socket.send(b"\r\n") client_socket.send(response_body) client_socket.close() if __name__ == "__main__": main()

Ini adalah pelaksanaan pelayan Web yang mudah, anda boleh mengoptimumkan dan mengembangkan berdasarkan ini.

9. Tambahan: Pemprosesan berbilang benang permintaan pelanggan

Dalam aplikasi sebenar, pelayan web mungkin perlu mengendalikan berbilang permintaan pelanggan pada masa yang sama. Untuk meningkatkan prestasi pelayan, kami boleh menggunakan multi-threading untuk mengendalikan permintaan pelanggan. Di sini, kami akan menggunakan perpustakaan threading Python untuk melaksanakan multi-threading.

1 Ubah suai fungsi yang mengendalikan permintaan pelanggan

Merangkum secara berasingan kod yang mengendalikan permintaan pelanggan ke dalam fungsi untuk memudahkan panggilan berbilang benang.

import threading
 
def handle_client_request(client_socket):
    request_data = client_socket.recv(1024).decode("utf-8")
    request_lines = request_data.split("\r\n")
    request_line = request_lines[0]
    method, url, http_version = request_line.split(" ")
 
    file_path = "www" + url
    file_content = read_file(file_path)
 
    if file_content is not None:
        response_line = "HTTP/1.1 200 OK\r\n"
        response_body = file_content
    else:
        response_line = "HTTP/1.1 404 Not Found\r\n"
        response_body = b"

404 Not Found

" client_socket.send(response_line.encode("utf-8")) client_socket.send(b"Content-Type: text/html\r\n") client_socket.send(b"\r\n") client_socket.send(response_body) client_socket.close()

2. Gunakan multi-threading untuk memproses permintaan klien

Dalam gelung utama, buat urutan baharu untuk setiap sambungan klien dan panggil fungsi handle_client_request.

while True:
    client_socket, client_address = server.accept()
    client_thread = threading.Thread(target=handle_client_request, args=(client_socket,))
    client_thread.start()

3. Lengkapkan kod pelayan web berbilang benang

import socket
import os
import threading
 
def read_file(file_path):
    if not os.path.exists(file_path):
        return None
 
    with open(file_path, "rb") as f:
        content = f.read()
    return content
 
def handle_client_request(client_socket):
    request_data = client_socket.recv(1024).decode("utf-8")
    request_lines = request_data.split("\r\n")
    request_line = request_lines[0]
    method, url, http_version = request_line.split(" ")
 
    file_path = "www" + url
    file_content = read_file(file_path)
 
    if file_content is not None:
        response_line = "HTTP/1.1 200 OK\r\n"
        response_body = file_content
    else:
        response_line = "HTTP/1.1 404 Not Found\r\n"
        response_body = b"

404 Not Found

" client_socket.send(response_line.encode("utf-8")) client_socket.send(b"Content-Type: text/html\r\n") client_socket.send(b"\r\n") client_socket.send(response_body) client_socket.close() def main(): server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.bind(("127.0.0.1", 8080)) server.listen(5) while True: client_socket, client_address = server.accept() client_thread = threading.Thread(target=handle_client_request, args=(client_socket,)) client_thread.start() if __name__ == "__main__": main()

Dengan menggunakan berbilang benang, pelayan web anda akan dapat mengendalikan berbilang permintaan pelanggan dengan lebih cekap. Dalam aplikasi sebenar, anda mungkin perlu mempertimbangkan lebih banyak pengoptimuman prestasi dan langkah keselamatan.

Berikut ialah beberapa cadangan dan arahan untuk pengembangan:

Ralat pengendalian dan pengelogan: Tambahkan pengendalian ralat dan fungsi pengelogan yang sesuai pada kod pelayan supaya apabila timbul masalah dapat cepat mencari dan menyelesaikan masalah.

  1. Sokong lebih banyak kaedah HTTP: Pada masa ini, pelayan web ringkas hanya menyokong kaedah GET. Untuk meningkatkan kepraktisan, anda boleh cuba melaksanakan lebih banyak kaedah HTTP, seperti POST, PUT, DELETE, dsb.

  2. Gunakan kumpulan proses atau kumpulan benang: Untuk meningkatkan prestasi pelayan, anda boleh menggunakan kumpulan proses (multiprocessing.Pool) atau kumpulan benang (concurrent.futures.ThreadPoolExecutor) untuk mengehadkan bilangan daripada concurrencies dan mencapai pengurusan sumber yang lebih Cekap.

  3. Sokongan HTTPS: Untuk melindungi keselamatan dan privasi data pengguna, anda boleh cuba melaksanakan protokol HTTPS (Secure Socket Layer HTTP) untuk menyulitkan komunikasi antara klien dan pelayan.

  4. Gunakan rangka kerja web yang lebih maju: Melaksanakan pelayan web yang berfungsi sepenuhnya memerlukan banyak kerja. Anda boleh mempertimbangkan untuk menggunakan rangka kerja web yang lebih maju (seperti Flask, Django, dll.), yang biasanya menyediakan ciri yang lebih kaya dan prestasi yang lebih baik.

  5. Belajar seni bina aplikasi Web: Untuk mereka bentuk dan melaksanakan aplikasi Web yang lebih kompleks, adalah sangat membantu untuk memahami seni bina asas dan corak reka bentuk aplikasi Web. Contohnya, anda boleh mempelajari reka bentuk API RESTful, seni bina MVC (Model-View-Controller), dsb.

  6. Ketahui operasi pangkalan data: Kebanyakan aplikasi web melibatkan penyimpanan dan pengambilan data. Anda boleh belajar cara menggunakan Python untuk mengendalikan pelbagai pangkalan data (seperti SQLite, MySQL, PostgreSQL, dll.) dan memahami cara menggunakan pangkalan data ini dalam aplikasi web.

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan pelayan web mudah menggunakan Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam