美文网首页
Web静态服务器-协程

Web静态服务器-协程

作者: GaoYuan117 | 来源:发表于2020-03-12 15:18 被阅读0次

-- coding:utf-8 --

Author GaoYuan

import socket
import re
import multiprocessing
import threading
import gevent

def service_client(client_socket):
"""为这个客户端返回数据"""

# 1.接收浏览器发过来的请求。即http请求
global response_headers, response_body

request = client_socket.recv(1024).decode("utf-8")
print(request)

# 按行切割获取的信息,拿到地址 GET /classic.css HTTP/1.1
# 处理多个请求
lines = request.splitlines()

# 正则匹配出来需要读取的文件 /classic.css
# result = re.match(r"[^/]*([^ ]*)", splits[0])
# print("*" * 20, result.group(1))

# 分割出需要读取的文件名字。GET /classic.css HTTP/1.1 ---->  /classic.css
if len(lines) <= 0:
    return

splits = lines[0].split(" ")

file_name = splits[1]
if file_name == "/":
    file_name = "index.html"

print("*" * 20, splits[1])

# 2.读取文件内容,返回http格式的数据,给浏览器
try:
    f = open("./html/" + file_name, "rb")
except:
    # 404
    response_headers = "HTTP/1.1 404 NOT FOUND\r\n"
    response_headers += "\r\n"
    response_body = "file not found".encode("utf-8")

else:
    response_headers = "HTTP/1.1 200 OK\r\n"
    response_headers += "\r\n"
    response_body = f.read()
    f.close()
finally:
    # 发送请求头
    client_socket.send(response_headers.encode("utf-8"))
    # 发送请求体
    client_socket.send(response_body)

# 关闭套接字
client_socket.close()

创建套接字

tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

设置当服务器先close 即服务器端4次挥手之后资源能够立即释放,这样就保证了,下次运行程序时 可以立即绑定7788端口

tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

绑定地址

tcp_server_socket.bind(("", 9099))

tcp_server_socket.listen(128)

while True:
# 接收消息
new_socket, addr = tcp_server_socket.accept()

# 创建协程,处理当多个客户端同时访问的问题,避免用户等待
gevent.spawn(service_client, new_socket).join()

相关文章

  • Web静态服务器-协程

    -- coding:utf-8 -- Author GaoYuan import socketimport rei...

  • web-静态服务器

    最近学习了使用基于HTTP协议的协程版的web静态服务器的搭建,这里简单记录下搭建的流程,代码如下:

  • gevent实现静态web服务器(协程实现)

    写在前面 为提高web服务器的服务质量,一般通过多线程/多进程实现多任务来服务大量用户,但线程和进程往往要消耗较多...

  • 初探 Swoft —— 安装

    Swoft 是首个基于 Swoole 原生协程的新时代 PHP 高性能协程全栈框架,内置协程网络服务器及常用的协程...

  • python 简单的web静态服务器

    python 简单的web静态服务器 原理步骤: web静态服务器:显示固定页面 准备名为web_server的p...

  • Python mini-web框架1:WSGI-mini-web

    总体内容 1、多进程-web服务器面向对象web服务器,返回的是静态界面 2、静态资源、动态资源、web服务器支持...

  • php中的数据库

    Xampp分为数据库服务器与web服务。web服务分为静态web服务器与动态web服务器访问用:localhost...

  • HTTP笔记

    一、HTTP概述 1.资源 Web服务器是Web资源的宿主,资源不一定是静态文件,还可以是根据需要生成内容的软件程...

  • 递归+协程并发+多核

    如何选定合适的协程数? N核服务器,通过执行业务的单协程分析出本地计算时间为x,等待时间为y,则工作协程数(协程池...

  • Nginx配置入门(三):用HTTP核心模块配置静态Web服务器

    用HTTP核心模块配置一个静态Web服务器 静态Web服务器的主要功能由ngx_http_core_module模...

网友评论

      本文标题:Web静态服务器-协程

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