美文网首页
多进程服务器

多进程服务器

作者: 栀心_d553 | 来源:发表于2020-02-12 16:04 被阅读0次

代码


import socket
#导入套接字
import re
import multiprocessing
def server_client(new_socket):
    # 为客户端返回数据
    #1、接收浏览器发送过来的请求,即http请求
    #GET / HTTP / 1.1
    #......
    request = new_socket.recv(1024).decode('utf-8')

    # print(request)
    request_lines = request.splitlines()
    print('')
    print('>' * 20)
    print(request_lines)

    # get post put del
    ret = re.match(r'[^/]+(/[^ ]*)',request_lines[0])
    file_name = ''
    #除了/之外,匹配一个或多个,往后匹配,只要不是空格
    #就要,是空格就停
    if ret:
        file_name = ret.group(1)
        #匹配的是,小括号里面的
        print("*"* 50,file_name)
        if file_name == '/':
            file_name = '/index.html'

    try:
        # f = open('../项目备份/index.html','rb')
        f = open('../项目备份/index.html'+file_name, 'rb')
    except:
        response = 'HTTP/1.1 404 not fonund \r\n'  # \r\n 是为了兼容Windows
        response += '\r\n'
        response += '--file not find--'
        new_socket.send(response.encode('utf-8'))
    else:
        html_content = f.read()
        f.close()
        # 2、返回http格式的数据给浏览器
        # 2.1 准备发送给浏览器的header
        response = 'HTTP/1.1 200 OK \r\n'  # \r\n 是为了兼容Windows
        response += '\r\n'

        # 2.2准备发送给浏览器的body
        # response+=  '<h1>haha

        #将Response Header 发送给浏览器
        new_socket.send(response.encode('utf-8'))
        #将Response Body发送给浏览器
        new_socket.send(html_content)
    #关闭客户端的套接字
    new_socket.close()
def main():
    # 用来完成整体的控制

    #1、创建套接字
    tcp_sever_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    tcp_sever_socket .setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
    #如果不想让客户端先发送关闭请求的话
    #2、绑定
    tcp_sever_socket.bind(('',7890))#里面的小括号为元祖
    #3、变为监听套接字(最大链接数128)
    tcp_sever_socket.listen(128)#128表示同时为128个客户端同时服务
    while True:
        #4、等待新客户端的链接
        new_socket,client_addr = tcp_sever_socket.accept()
        #5、为这个客户端服务
        # server_client(new_socket)
        p = multiprocessing.process(target = server_client,args = (new_socket,))
        p.start()
        new_socket.close()
        
    #6、关闭监听套接字

    tcp_sever_socket.close()


if __name__ == '__main__':
    main()

相关文章

网友评论

      本文标题:多进程服务器

      本文链接:https://www.haomeiwen.com/subject/bglcfhtx.html