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
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
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 = ('localhost', 8080) class WebServer(): def run(self): print >>sys.stderr, 'starting up on %s port %s' % 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, 'waiting for a connection' try: #获取请求信息 data = connection.recv(1024) if data: #发送请求信息 connection.sendall(getFileContent.getHtmlFile(data)) finally: connection.close() if __name__ == '__main__': 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!