基于Python+socket编程实现的简单的WebServer
通过解析客户端向服务端发送的请求数据: receiveMsg=self.__connection.recv(self.__bufferSize)。
来向客户端返回相应的请求数据
文件布局
- pymsgi
- static(存放照片等文件)
- templates(存放html文件,下列为包含文件)
- error.html
- index.html
- main.html
- application.py
- request.py
- response.py
- runserver.py
以下为代码实现
#application.py代码实现
from socket import *
import threading
from response import HttpResponse
from request import HttpRequest
#WSGI服务器
class WSGIServer():
def __init__(self,host='localhost',port=9090,connectSize=100):
'''
:param port: 服务器的端口号
:param connectSize:默认的并发数量
'''
self.__host=host
self.__port=port
self.__connectSize=connectSize
pass
def startServer(self):
'''
服务器启动主程序
:return:
'''
server=None
try:
server=socket(AF_INET,SOCK_STREAM)
server.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)
server.bind((self.__host,self.__port))
server.listen(self.__connectSize)
while True:
print("++++++++++++服务器启动成功:http://"+self.__host+":"+str(self.__port))
clientConn,clientAddr=server.accept()
#定义独立的线程,处理每一个用户请求
wt=WorkThread(clientConn,clientAddr)
wt.start()
pass
except socket.gaierror as g:
print(g)
pass
finally:
pass
pass
pass
class WorkThread(threading.Thread):
def __init__(self,connection,addr,bufferSize=8096):
threading.Thread.__init__(self)
self.__connection=connection
self.__addr=addr
self.__bufferSize=bufferSize
def run(self):
#while True: #保持长连接
receiveMsg=self.__connection.recv(self.__bufferSize)
receiveMsg=receiveMsg.decode('utf-8')
print(receiveMsg)
request=HttpRequest(