山野村夫-陈墨 发表于 2019-12-2 23:00

python 多线程实现简易 web服务器

这是一个简单的web服务器, 通过socket下的tcp和python多线程实现。
没有足够的功能, 只能作为一个了解bs模式的样例。

运行:
打开浏览器,输入“localhost:1027”,即可。(首先打开服务器)
importsocket
importre
importthreading

'''
    多线程实现web服务器:
      # 1、新建线程;
      # 2、在新线程中关闭套接字
      
      # 注:线程资源复制,套接字关闭一个就行   

'''

def response(new_socket):
    data=new_socket.recv(1024).decode("utf-8").splitlines()

    print("请求: ")
    for item indata:
      print(item)

    ret= re.search(r'[^/]+(/[^ ]*)',data)

    print(ret)
    if ret:
      file_name = ret.group(1)
      # print("*"*50, file_name)
      if file_name == "/":
            file_name = "/index.html"


    # 2. 返回http格式的数据,给浏览器

    try:
#网页文件的路径自己设置
      f = open("F:/code/python/tmp/web/HTML家政服务公司网站模板" + file_name, "rb")
    except:
      response = "HTTP/1.1 404 NOT FOUND\r\n"
      response += "\r\n"
      response += "------file not found-----"
      new_socket.send(response.encode("utf-8"))
    else:
      html_content = f.read()
      f.close()
      # 2.1 准备发送给浏览器的数据---header
      response = "HTTP/1.1 200 OK\r\n"
      response += "\r\n"
      # 2.2 准备发送给浏览器的数据---boy
      # response += "hahahhah"

      # 将response header发送给浏览器
      new_socket.send(response.encode("utf-8"))
      # 将response body发送给浏览器
      new_socket.send(html_content)
      # 新进程中关闭套接字
      new_socket.close()

def main():

    # 初始化套接字
    tcp_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    tcp_server.setsockopt(socket.SOL_SOCKET,   socket.SO_REUSEADDR, 1)
    # 1、绑定端口
    tcp_server.bind( ('',1027))
    # 2、设置监听
    tcp_server.listen(128)

    while True:
      # 3、等待接收
      new_server,client_adder = tcp_server.accept()
      #4、响应
      threading.Thread( target= response,args=(new_server,)).start()
      #5、关闭新套接字------此处关闭会导致新套接字无法正常使用
      #new_server.close()
    # 6、关闭服务器套接字
    tcp_server.close()

if__name__ == "__main__":
    main()


18519204131 发表于 2019-12-2 23:07

厉害大佬{:1_893:}

a3322a 发表于 2019-12-2 23:52

相当不错,比aspweb还要精简!

MOEYU_VANILLA 发表于 2019-12-3 00:13

感谢分享~

1983 发表于 2019-12-3 00:16

嗯,是听精简的、。。。

shlboliqiao 发表于 2019-12-9 12:40

多谢分享,学习下{:1_893:}{:1_919:}

xinjth 发表于 2020-1-12 09:36

看看,学习中!

nn1023 发表于 2020-1-13 17:13

收藏了,很好用
页: [1]
查看完整版本: python 多线程实现简易 web服务器