博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
pythonweb服务器编程(三)
阅读量:6708 次
发布时间:2019-06-25

本文共 4151 字,大约阅读时间需要 13 分钟。

Web静态服务器-2-显示需要的页面

#coding=utf-8import socketfrom multiprocessing import Processimport redef handleClient(clientSocket):    '用一个新的进程,为一个客户端进行服务'    recvData = clientSocket.recv(2014)    requestHeaderLines = recvData.splitlines()    for line in requestHeaderLines:        print(line)    httpRequestMethodLine = requestHeaderLines[0]    getFileName = re.match("[^/]+(/[^ ]*)", httpRequestMethodLine).group(1)    print("file name is ===>%s"%getFileName) #for test    if getFileName == '/':        getFileName = documentRoot + "/index.html"    else:        getFileName = documentRoot + getFileName    print("file name is ===2>%s"%getFileName) #for test    try:        f = open(getFileName)    except IOError:        responseHeaderLines = "HTTP/1.1 404 not found\r\n"        responseHeaderLines += "\r\n"        responseBody = "====sorry ,file not found===="    else:        responseHeaderLines = "HTTP/1.1 200 OK\r\n"        responseHeaderLines += "\r\n"        responseBody = f.read()        f.close()    finally:        response = responseHeaderLines + responseBody        clientSocket.send(response)        clientSocket.close()def main():    '作为程序的主控制入口'    serverSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)    serverSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)    serverSocket.bind(("", 7788))    serverSocket.listen(10)    while True:        clientSocket,clientAddr = serverSocket.accept()        clientP = Process(target = handleClient, args = (clientSocket,))        clientP.start()        clientSocket.close()#这里配置服务器documentRoot = './html'if __name__ == '__main__':    main()

 

 

Web静态服务器-3-使用类

#coding=utf-8import socketimport sysfrom multiprocessing import Processimport reclass WSGIServer(object):    addressFamily = socket.AF_INET    socketType = socket.SOCK_STREAM    requestQueueSize = 5    def __init__(self, server_address):        #创建一个tcp套接字        self.listenSocket = socket.socket(self.addressFamily,self.socketType)        #允许重复使用上次的套接字绑定的port        self.listenSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)        #绑定        self.listenSocket.bind(server_address)        #变为被动,并制定队列的长度        self.listenSocket.listen(self.requestQueueSize)    def serveForever(self):        '循环运行web服务器,等待客户端的链接并为客户端服务'        while True:            #等待新客户端到来            self.clientSocket, client_address = self.listenSocket.accept()            #方法2,多进程服务器,并发服务器于多个客户端            newClientProcess = Process(target = self.handleRequest)            newClientProcess.start()            #因为创建的新进程中,会对这个套接字+1,所以需要在主进程中减去依次,即调用一次close            self.clientSocket.close()    def handleRequest(self):        '用一个新的进程,为一个客户端进行服务'        recvData = self.clientSocket.recv(2014)        requestHeaderLines = recvData.splitlines()        for line in requestHeaderLines:            print(line)        httpRequestMethodLine = requestHeaderLines[0]        getFileName = re.match("[^/]+(/[^ ]*)", httpRequestMethodLine).group(1)        print("file name is ===>%s"%getFileName) #for test        if getFileName == '/':            getFileName = documentRoot + "/index.html"        else:            getFileName = documentRoot + getFileName        print("file name is ===2>%s"%getFileName) #for test        try:            f = open(getFileName)        except IOError:            responseHeaderLines = "HTTP/1.1 404 not found\r\n"            responseHeaderLines += "\r\n"            responseBody = "====sorry ,file not found===="        else:            responseHeaderLines = "HTTP/1.1 200 OK\r\n"            responseHeaderLines += "\r\n"            responseBody = f.read()            f.close()        finally:            response = responseHeaderLines + responseBody            self.clientSocket.send(response)            self.clientSocket.close()#设定服务器的端口serverAddr = (HOST, PORT) = '', 8888#设置服务器服务静态资源时的路径documentRoot = './html'def makeServer(serverAddr):    server = WSGIServer(serverAddr)    return serverdef main():    httpd = makeServer(serverAddr)    print('web Server: Serving HTTP on port %d ...\n'%PORT)    httpd.serveForever()if __name__ == '__main__':    main()

 

转载于:https://www.cnblogs.com/leecoffee/p/9037654.html

你可能感兴趣的文章
arduino 串口读取字符串_Arduino传感器教程 第24章NRF24L01 控制电舵机
查看>>
状态码202_HTTP状态码(HTTP Status Code)
查看>>
sharepoint 2010 网站集定期备份
查看>>
管理SCCM/MDT中的驱动分类
查看>>
java之HashTable
查看>>
Windows Server 2012体验之配置存储池
查看>>
轻松上手移动互联——百度SiteApp建造日志
查看>>
我从跑步中领悟到了什么?
查看>>
你的权限等于你的可见度
查看>>
Gartner:威胁情报的定义
查看>>
redis多实例重启脚本
查看>>
开发人员学Linux(4):使用JMeter对网站和数据库进行压力测试
查看>>
在51系列中data,idata,xdata,pdata的区别
查看>>
【Deeplearning】关注书目
查看>>
【再见RMQ】NYOJ-119-士兵杀敌(三),区间内大小差值
查看>>
loadrunner中Run-time-Setting设置
查看>>
SSL连接建立过程分析(1)
查看>>
port与大全portClose方法
查看>>
美丽的数学家:如果您讨厌数学,这些其实都是人生故事
查看>>
Kettle 中转换(transformation)的执行过程
查看>>