Maison >développement back-end >Tutoriel Python >Python implémente un simple serveur HttpServer

Python implémente un simple serveur HttpServer

巴扎黑
巴扎黑original
2017-09-26 10:35:073177parcourir

Cet article présente principalement l'exemple simple de serveur HttpServer implémenté en Python. L'éditeur pense qu'il est plutôt bon, je vais donc le partager avec vous maintenant et le donner comme référence. Suivons l'éditeur et jetons un coup d'œil.

Pour écrire un serveur simple similaire à Tomcat, vous devez d'abord comprendre ces points :

1. de (Serveur)

Le rôle A demande des données au rôle B. À ce stade, A peut être considéré comme le client et B comme le serveur. La responsabilité principale du client est d'envoyer des demandes et de recevoir des informations de demande renvoyées par le serveur en fonction des demandes qu'il envoie, tandis que la responsabilité principale du serveur est de recevoir des demandes et de renvoyer des données de demande.

2. Qu'est-ce qu'un navigateur et comment il fonctionne

On parle souvent d'architecture B/S, C/S. navigateur/serveur, C /S fait référence à Client/Serveur. L'architecture B/S est en fait un programme appliqué au navigateur tant que ce qui est finalement affiché sur le navigateur est l'architecture B/S au lieu de ce qui est affiché sur le navigateur. Le navigateur est l'architecture C/S comme le jeu commun League of Legends. Mais il n’existe essentiellement qu’une architecture C/S, car le navigateur est un client spécial.

La particularité du navigateur est qu'il dispose des trois moteurs suivants :

  • Moteur d'analyse DOM : c'est-à-dire que le navigateur peut analyser HTML

  • Moteur d'analyse de style : c'est-à-dire que le navigateur peut analyser CSS

  • Moteur d'analyse de script : c'est-à-dire que le navigateur peut analyser JAVASCRIPT

3. Socket

Le client et le serveur mentionnés ci-dessus, comment réaliser la connexion et le transfert de données entre eux, c'est Socket, chaque langage de programmation a la programmation Socket, la fonction de Socket est de fournir la capacité de communication réseau

4. Le protocole HTTP et la différence entre HTTP et TCP/TP

Le client. et utilisation du serveur Socket Réalise la capacité de communication réseau et peut réaliser la transmission de données. Le protocole régule la transmission des données, ce qui signifie que les données transmises entre le client et le serveur doivent être transmises selon certaines spécifications et normes, et ne peuvent pas être transmises aveuglément.

TCP/IP (Transmission Control Protocol/Internet Protocol) : Protocole de contrôle de transmission/Internet Protocol

HTTP (HyperText Transfer Protocol) : Protocole de transfert hypertexte.

La différence entre TCP/TP :

Pour faire une métaphore vivante, TCP/TP est la route et HTTP est la voiture sur la route. Donc HTTP doit être basé sur TCP/TP.

HTTP est principalement utilisé dans les programmes Web. Il a été conçu à l'origine pour fournir une méthode de publication et de réception de pages HTML. Cela peut être très abstrait et difficile à comprendre. Plus précisément, lorsque nous visitons un site Web, nous avons uniquement besoin d'obtenir le contenu basé sur ce site Web (tel que HTML, CSS, JavaScript). Mais nous avons récupéré le package de ressources reçu par le navigateur (vous pouvez utiliser l'outil Fiddler) et avons constaté qu'en plus du contenu de l'entité requis par la page Web, il existe également les informations suivantes :

HTTP /1.1 200 OK
Cache-Control : private
Content-Type : text/plain; charset=utf-8
Content-Encoding : gzip
Vary : Accept-Encoding
Serveur : Microsoft -IIS/7.5
X-AspNet -Version : 4.0.30319
>

Il s'agit de la spécification du protocole http Par exemple, Content-Type fait référence au format du fichier lors de la transmission, et Content-Encoding spécifie le format d'encodage. Il y en a bien d'autres que ce qui précède. Je ne présenterai pas ici la signification de ces paramètres un par un

5 La signification de l'URL

URL (Uniform Resource Locator. ), c'est-à-dire On parle souvent de l'URL. Analysons directement une URL pour l'illustrer : http://198.2.17.25:8080/webapp/index.html

Cela signifie trouver le serveur. avec IP 198.2.17.25 Le répertoire inférieur est l'index.html de la webapp


, mais ce que l'on voit souvent est cette URL : http://goodcandle.cnblogs.com/archive/2005/12/10 /294652.aspx


En fait, c'est la même chose que ci-dessus, mais il existe ici une résolution de nom de domaine, qui peut résoudre goodcandle.cnblogs.com en l'adresse IP correspondante


Après avoir clarifié les cinq points ci-dessus, commencez à écrire Le code

webServer.py

webServer.py est très clair et concis <.>Le serveur renvoie des informations au navigateur, mais les données envoyées aux spécifications du protocole HTTP doivent être respectées
getFileContent.py doit traiter les données envoyées conformément aux spécifications du protocole HTTP

import socket
import sys
import getFileContent
#声明一个将要绑定的IP和端口,这里是用本地地址
server_address = (&#39;localhost&#39;, 8080)
class WebServer():
  def run(self):
    print >>sys.stderr, &#39;starting up on %s port %s&#39; % server_address
    #实例化一个Socket
    sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    #绑定IP和端口
    sock.bind(server_address)
    #设置监听
    sock.listen(1)
    #这里首先给个死循环,其实这里是需要多线程的,再后续版本将会实现
    while True:
      #接受客户端的请求并得到请求信息和请求的端口信息
      connection, client_address = sock.accept()
      print >>sys.stderr, &#39;waiting for a connection&#39;
      try:
        #获取请求信息
        data = connection.recv(1024)
        if data:
          #发送请求信息
          connection.sendall(getFileContent.getHtmlFile(data))
      finally:
        connection.close()

if __name__ == &#39;__main__&#39;:
  server=WebServer()
  server.run()

connection.sendall()

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn