Python은 간단한 HttpServer 서버를 구현합니다.
이 글에서는 Python으로 구현한 간단한 HttpServer 서버 예제를 주로 소개합니다. 편집자도 꽤 괜찮다고 생각해서 지금 공유하고 참고용으로 올려드리겠습니다. 편집기를 따라 살펴보겠습니다
Tomcat과 유사한 간단한 서버를 작성하려면 먼저 다음 사항을 이해해야 합니다.
1 클라이언트와 서버의 역할과 기능
역할 A는 역할에서 데이터를 요청합니다. B. 이때 A는 클라이언트, B는 서버로 간주할 수 있다. 클라이언트의 주요 책임은 요청을 보내고 서버가 보낸 요청에 따라 서버가 반환한 요청 정보를 받는 것입니다. 반면 서버의 주요 책임은 요청을 받고 요청 데이터를 반환하는 것입니다.
2. 브라우저란 무엇이며 어떻게 작동하나요
우리는 흔히 B/S, C/S 아키텍처라고 하는데, B/S는 브라우저/서버, C/S는 클라이언트/서버를 의미합니다. 실제로 B/S 아키텍처는 브라우저에 표시되는 것이 B/S 아키텍처인 만큼, 브라우저에 표시되는 것이 C/S 아키텍처가 아닌 브라우저에 적용되는 프로그램입니다. 일반적인 리그 오브 레전드 게임. 그러나 본질적으로 브라우저는 특별한 클라이언트이기 때문에 C/S 아키텍처만 있습니다.
브라우저의 특별한 점은 다음 세 가지 엔진이 있다는 것입니다.
DOM 구문 분석 엔진: 즉, 브라우저는 HTML을 구문 분석할 수 있습니다.
스타일 구문 분석 엔진: 즉, 브라우저는 구문 분석할 수 있습니다. CSS
스크립트 구문 분석 엔진: 즉, 브라우저는 JAVASCRIPT
3.Socket
위에서 언급한 클라이언트와 서버 사이의 연결 및 데이터 전송 방법, 이것이 바로 Socket입니다. 프로그래밍 언어 모두 소켓 프로그래밍을 갖고 있으며, 소켓의 기능은 네트워크 통신 기능을 제공하는 것입니다
4. HTTP 프로토콜과 HTTP와 TCP/TP의 차이점
클라이언트와 서버는 네트워크 통신 기능을 구현합니다. 소켓이며 데이터 전송을 실현할 수 있습니다. 프로토콜은 데이터 전송을 규제합니다. 즉, 클라이언트와 서버 간에 전송되는 데이터는 특정 사양 및 표준에 따라 전송되어야 하며 맹목적으로 전송될 수 없습니다.
TCP/IP(전송 제어 프로토콜/인터넷 프로토콜): 전송 제어 프로토콜/인터넷 프로토콜
HTTP(하이퍼텍스트 전송 프로토콜): 하이퍼텍스트 전송 프로토콜.
TCP/TP의 차이점:
생생하게 비유하자면 TCP/TP는 도로, HTTP는 도로 위의 자동차이므로 HTTP는 TCP/TP를 기반으로 해야 합니다.
HTTP는 주로 웹 프로그램에서 사용됩니다. 원래 HTML 페이지를 게시하고 수신하는 방법을 제공하기 위해 설계되었습니다. 이는 매우 추상적이고 이해하기 어려울 수 있습니다. 특히, 웹사이트를 방문할 때 이 웹사이트에 기반한 콘텐츠(예: html, css, JavaScript)만 가져오면 됩니다. 그러나 우리는 브라우저에서 받은 리소스 패키지를 가져왔고(Fiddler 도구를 사용할 수 있음) 웹 페이지에 필요한 엔터티 콘텐츠 외에도 다음 정보도 있음을 발견했습니다.
HTTP/1.1 200 OK
캐시 -컨트롤: private
콘텐츠 유형: text /plain; charset=utf-8
콘텐츠 인코딩: gzip
Vary: Accept-Encoding
서버: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
X -Powered-By: ASP.NET
날짜: 2017년 1월 24일 화요일 03:25:23 GMT
Connection: close
Content-Length: 661
http 프로토콜 사양입니다. 예를 들어 Content-Type은 다음을 참조합니다. 전송 중 파일 형식을 지정하고 Content-Encoding은 인코딩 형식을 지정합니다. 위에 나온 것 외에도 여러 가지가 있는데 여기서는 이 매개변수의 의미를 하나씩 소개하지 않겠습니다
5. URL
URL(Uniform Resource Locator)의 의미는 우리가 흔히 URL이라고 부르자. URL 분석 그를 설명하세요: http://198.2.17.25:8080/webapp/index.html
이것은 IP 198.2.17.25
을 가진 서버의 디렉토리에서 webapp의 index.html을 찾는 것을 의미합니다. 우리가 자주 보는 URL은 http://goodcandle.cnblogs.com/archive/2005/12/10/294652.aspx
사실 위와 같지만 도메인 이름 확인이 있습니다. 여기서 goodcandle.cnblogs.com을 해당 IP 주소로 해석할 수 있습니다
위의 5가지 사항을 파악한 후 코드 작성을 시작하세요
webServer.py
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()
webServer.py는 매우 명확하고 간결합니다.connection.sendall()
The 서버는 브라우저에 정보를 반환하지만 전송되는 데이터는 HTTP 프로토콜 사양을 따라야 합니다
getFileContent.py는 전송된 데이터에 대한 HTTP 프로토콜 사양을 처리합니다
import sys import os #得到要发送的数据信息 def getHtmlFile(data): msgSendtoClient="" requestType=data[0:data.find("/")].rstrip() #判断是GET请求还是POST请求 if requestType=="GET": msgSendtoClient=responseGetRequest(data,msgSendtoClient) if requestType=="POST": msgSendtoClient=responsePostRequest(data,msgSendtoClient) return msgSendtoClient #打开文件,这里不直接写,二是去取要发送的文件再写 def getFile(msgSendtoClient,file): for line in file: msgSendtoClient+=line return msgSendtoClient #筛选出请求的一个方法 def getMidStr(data,startStr,endStr): startIndex = data.index(startStr) if startIndex>=0: startIndex += len(startStr) endIndex = data.index(endStr) return data[startIndex:endIndex] #获取要发送数据的大小,根据HTTP协议规范,要提前指定发送的实体内容的大小 def getFileSize(fileobject): fileobject.seek(0,2) size = fileobject.tell() return size #设置编码格式和文件类型 def setParaAndContext(msgSendtoClient,type,file,openFileType): msgSendtoClient+="Content-Type: "+type+";charset=utf-8" msgSendtoClient+="Content-Length: "+str(getFileSize(open(file,"r")))+"\n"+"\n" htmlFile=open(file,openFileType) msgSendtoClient=getFile(msgSendtoClient,htmlFile) return msgSendtoClient #GET请求的返回数据 def responseGetRequest(data,msgSendtoClient): return responseRequest(getMidStr(data,'GET /','HTTP/1.1'),msgSendtoClient) #POST请求的返回数据 def responsePostRequest(data,msgSendtoClient): return responseRequest(getMidStr(data,'POST /','HTTP/1.1'),msgSendtoClient) #请求返回数据 def responseRequest(getRequestPath,msgSendtoClient): headFile=open("head.txt","r") msgSendtoClient=getFile(msgSendtoClient,headFile) if getRequestPath==" ": msgSendtoClient=setParaAndContext(msgSendtoClient,"text/html","index.html","r") else: rootPath=getRequestPath if os.path.exists(rootPath) and os.path.isfile(rootPath): if ".html" in rootPath: msgSendtoClient=setParaAndContext(msgSendtoClient,"text/html",rootPath,"r") if ".css" in rootPath: msgSendtoClient=setParaAndContext(msgSendtoClient,"text/css",rootPath,"r") if ".js" in rootPath: msgSendtoClient=setParaAndContext(msgSendtoClient,"application/x-javascript",rootPath,"r") if ".gif" in rootPath: msgSendtoClient=setParaAndContext(msgSendtoClient,"image/gif",rootPath,"rb") if ".doc" in rootPath: msgSendtoClient=setParaAndContext(msgSendtoClient,"application/msword",rootPath,"rb") if ".mp4" in rootPath: msgSendtoClient=setParaAndContext(msgSendtoClient,"video/mpeg4",rootPath,"rb") else: msgSendtoClient=setParaAndContext(msgSendtoClient,"application/x-javascript","file.js","r") return msgSendtoClient
위 내용은 Python은 간단한 HttpServer 서버를 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











PHP와 Python은 고유 한 장점과 단점이 있으며 선택은 프로젝트 요구와 개인 선호도에 달려 있습니다. 1.PHP는 대규모 웹 애플리케이션의 빠른 개발 및 유지 보수에 적합합니다. 2. Python은 데이터 과학 및 기계 학습 분야를 지배합니다.

Python과 JavaScript는 커뮤니티, 라이브러리 및 리소스 측면에서 고유 한 장점과 단점이 있습니다. 1) Python 커뮤니티는 친절하고 초보자에게 적합하지만 프론트 엔드 개발 리소스는 JavaScript만큼 풍부하지 않습니다. 2) Python은 데이터 과학 및 기계 학습 라이브러리에서 강력하며 JavaScript는 프론트 엔드 개발 라이브러리 및 프레임 워크에서 더 좋습니다. 3) 둘 다 풍부한 학습 리소스를 가지고 있지만 Python은 공식 문서로 시작하는 데 적합하지만 JavaScript는 MDNWebDocs에서 더 좋습니다. 선택은 프로젝트 요구와 개인적인 이익을 기반으로해야합니다.

CentOS 시스템에서 Pytorch GPU 가속도를 활성화하려면 Cuda, Cudnn 및 GPU 버전의 Pytorch를 설치해야합니다. 다음 단계는 프로세스를 안내합니다. CUDA 및 CUDNN 설치 CUDA 버전 호환성 결정 : NVIDIA-SMI 명령을 사용하여 NVIDIA 그래픽 카드에서 지원하는 CUDA 버전을보십시오. 예를 들어, MX450 그래픽 카드는 CUDA11.1 이상을 지원할 수 있습니다. Cudatoolkit 다운로드 및 설치 : NVIDIACUDATOOLKIT의 공식 웹 사이트를 방문하여 그래픽 카드에서 지원하는 가장 높은 CUDA 버전에 따라 해당 버전을 다운로드하여 설치하십시오. CUDNN 라이브러리 설치 :

Docker는 Linux 커널 기능을 사용하여 효율적이고 고립 된 응용 프로그램 실행 환경을 제공합니다. 작동 원리는 다음과 같습니다. 1. 거울은 읽기 전용 템플릿으로 사용되며, 여기에는 응용 프로그램을 실행하는 데 필요한 모든 것을 포함합니다. 2. Union 파일 시스템 (Unionfs)은 여러 파일 시스템을 스택하고 차이점 만 저장하고 공간을 절약하고 속도를 높입니다. 3. 데몬은 거울과 컨테이너를 관리하고 클라이언트는 상호 작용을 위해 사용합니다. 4. 네임 스페이스 및 CGroup은 컨테이너 격리 및 자원 제한을 구현합니다. 5. 다중 네트워크 모드는 컨테이너 상호 연결을 지원합니다. 이러한 핵심 개념을 이해 함으로써만 Docker를 더 잘 활용할 수 있습니다.

Minio Object Storage : Centos System Minio 하의 고성능 배포는 Go Language를 기반으로 개발 한 고성능 분산 객체 저장 시스템입니다. Amazons3과 호환됩니다. Java, Python, JavaScript 및 Go를 포함한 다양한 클라이언트 언어를 지원합니다. 이 기사는 CentOS 시스템에 대한 Minio의 설치 및 호환성을 간단히 소개합니다. CentOS 버전 호환성 Minio는 다음을 포함하되 이에 국한되지 않는 여러 CentOS 버전에서 확인되었습니다. CentOS7.9 : 클러스터 구성, 환경 준비, 구성 파일 설정, 디스크 파티셔닝 및 미니를 다루는 완전한 설치 안내서를 제공합니다.

CentOS 시스템에 대한 Pytorch 분산 교육에는 다음 단계가 필요합니다. Pytorch 설치 : 전제는 Python과 PIP가 CentOS 시스템에 설치된다는 것입니다. CUDA 버전에 따라 Pytorch 공식 웹 사이트에서 적절한 설치 명령을 받으십시오. CPU 전용 교육의 경우 다음 명령을 사용할 수 있습니다. PipinStalltorchtorchvisiontorchaudio GPU 지원이 필요한 경우 CUDA 및 CUDNN의 해당 버전이 설치되어 있는지 확인하고 해당 PyTorch 버전을 설치하려면 설치하십시오. 분산 환경 구성 : 분산 교육에는 일반적으로 여러 기계 또는 단일 기계 다중 GPU가 필요합니다. 장소

CentOS 시스템에 Pytorch를 설치할 때는 적절한 버전을 신중하게 선택하고 다음 주요 요소를 고려해야합니다. 1. 시스템 환경 호환성 : 운영 체제 : CentOS7 이상을 사용하는 것이 좋습니다. Cuda 및 Cudnn : Pytorch 버전 및 Cuda 버전은 밀접하게 관련되어 있습니다. 예를 들어, pytorch1.9.0은 cuda11.1을 필요로하고 Pytorch2.0.1은 cuda11.3을 필요로합니다. CUDNN 버전도 CUDA 버전과 일치해야합니다. Pytorch 버전을 선택하기 전에 호환 CUDA 및 CUDNN 버전이 설치되었는지 확인하십시오. 파이썬 버전 : Pytorch 공식 지점

Centos의 최신 버전으로 Pytorch를 업데이트하면 다음 단계를 수행 할 수 있습니다. 방법 1 : PIP를 사용하여 PIP 업데이트 : 먼저 PIP의 PIP 버전이 최신 버전의 PyTorch를 제대로 설치하지 못할 수 있기 때문에 PIP가 최신 버전인지 확인하십시오. PipinStall-UpgradePip Unin Incalls of Pytorch (설치된 경우) : PipuninStalltorchtorchvisiontorchaudio 설치 최신 정보
