Web服务器的底层原理与实现

简介: Web服务器的底层原理与实现

import socket, threading, time
from Http.HttpResponse import HttpResponse
from WebFrame.WebFrame import handler_request

class HttpWebServer(object):

__run = True
def __init__(self, ip_address:str,listen_port: int):
    self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # Set socket reuse ->  True   default:False
    self.server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
    self.server_socket.bind(
        (ip_address, listen_port)
    )
    self.server_socket.listen(128)
@staticmethod
def handler_http_request(new_socket: socket.socket):
    """
    :param new_socket:
    :return:
    """
    rec_data = new_socket.recv(4096)
    if len(rec_data) == 0:
        return
    content = rec_data.decode("utf-8")
    request_path = content.split(" ", maxsplit=2)[1]
    if request_path == '/':
        request_path = '/index.html'
    if request_path.endswith(".html"):
        """ ----------------  dynamic  request   ----------------"""
        http_response = handler_request(
            {"request_path": request_path}
        )
        new_socket.send(http_response)
    else:
        """ ----------------  static   request   --------------- """
        response_headers, response_body, response_length = None, None, 0
        response_status = ''
        try:
            with open("../static" + request_path, 'rb') as f:
                response_body = f.read()
                response_length: int = len(response_body)
                response_status = HttpResponse.RESPONSE_STATUS_OK
        except BaseException as e:
            with open('../static/html/404.html', 'rb') as f:
                response_body = f.read()
                response_length: int = len(response_body)
                response_status = HttpResponse.RESPONSE_STATUS_NOT_FOUND
        finally:
            local_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
            response_headers = f'HTTP/1.1 {response_status}\r\nContent-Length:{response_length}\r\nDate:{local_time}\r\nServer: Pagche\r\n'
            response = response_headers.encode("utf-8") + "\r\n".encode("utf-8") + response_body
            new_socket.send(response)
    new_socket.close()

def start(self) -> None:
    print("Server Start Successful!")
    while self.__run:
        new_socket, address_info = self.server_socket.accept()
        print(f"[+] client {address_info[0]} send request")
        sub_thread = threading.Thread(target=HttpWebServer.handler_http_request, args=(new_socket,))
        sub_thread.setDaemon(True)
        sub_thread.start()

def stop(self) -> None:
    self.__run = False
    print("Server Stop Successful!")

if name == '__main__':

server=HttpWebServer('',8888)
server.start()
相关文章
|
6月前
|
移动开发 数据挖掘 开发者
服务器发送事件(SSE)在现代Web开发中的关键作用
服务器发送事件(SSE)是HTML5标准协议,用于服务器主动向客户端推送实时数据,适合单向通信场景。相比WebSocket,SSE更简洁高效,基于HTTP协议,具备自动重连、事件驱动等特性。常见应用场景包括实时通知、新闻推送、数据分析等。通过Apipost等工具可轻松调试SSE,助力开发者构建高效实时Web应用。示例中,电商平台利用SSE实现秒杀活动通知,显著减少延迟并简化架构。掌握SSE技术,能大幅提升用户体验与开发效率。
|
4月前
|
存储 应用服务中间件 nginx
在使用Nginx之后,如何在web应用中获取用户IP以及相关原理
但总的来说,通过理解网络通信的基础知识,了解http协议以及nginx的工作方式,我们已经能在大多数情况下准确地获取用户的真实IP地址了,在调试问题或者记录日志时会起到很大的帮助。
247 37
|
5月前
|
弹性计算 资源调度 搜索推荐
阿里云ECS中长期成本节省计划解析:从原理到实战,助力企业降本提效
阿里云ECS节省计划的推出为企业用户提供了一种全新的成本优化方案。通过一次性购买的方式享受长期按量付费的折扣权益,客户不仅可以大幅降低ECS资源的使用成本还可以享受更高的灵活性和便捷性。本文将从多个维度深入剖析阿里云ECS节省计划,包括其核心优势、详尽的购买使用指引、与传统付费模式的全面对比,以及一客户成功案例,以供大家了解和参考。
|
10月前
|
XML 前端开发 JavaScript
PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑
本文深入探讨了PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑;Ajax则通过异步请求实现页面无刷新更新。文中详细介绍了两者的工作原理、数据传输格式选择、具体实现方法及实际应用案例,如实时数据更新、表单验证与提交、动态加载内容等。同时,针对跨域问题、数据安全与性能优化提出了建议。总结指出,PHP与Ajax的结合能显著提升Web应用的效率和用户体验。
219 3
|
11月前
|
Java PHP
PHP作为广受青睐的服务器端脚本语言,在Web开发中占据重要地位。理解其垃圾回收机制有助于开发高效稳定的PHP应用。
【10月更文挑战第1天】PHP作为广受青睐的服务器端脚本语言,在Web开发中占据重要地位。其垃圾回收机制包括引用计数与循环垃圾回收,对提升应用性能和稳定性至关重要。本文通过具体案例分析,详细探讨PHP垃圾回收机制的工作原理,特别是如何解决循环引用问题。在PHP 8中,垃圾回收机制得到进一步优化,提高了效率和准确性。理解这些机制有助于开发高效稳定的PHP应用。
124 3
|
11月前
|
分布式计算 监控 Hadoop
Hadoop-29 ZooKeeper集群 Watcher机制 工作原理 与 ZK基本命令 测试集群效果 3台公网云服务器
Hadoop-29 ZooKeeper集群 Watcher机制 工作原理 与 ZK基本命令 测试集群效果 3台公网云服务器
160 1
|
11月前
|
前端开发 Java API
JAVA Web 服务及底层框架原理
【10月更文挑战第1天】Java Web 服务是基于 Java 编程语言用于开发分布式网络应用程序的一种技术。它通常运行在 Web 服务器上,并通过 HTTP 协议与客户端进行通信。
136 1
|
11月前
|
存储 安全 前端开发
在前端开发中需要考虑的常见web安全问题和攻击原理以及防范措施
在前端开发中需要考虑的常见web安全问题和攻击原理以及防范措施
1155 0
|
4月前
|
Web App开发 前端开发 JavaScript
鸿蒙5开发宝藏案例分享---Web适配一多开发实践
这是一份实用的鸿蒙Web多设备适配开发指南,针对开发者在不同屏幕尺寸下的布局难题提供了解决方案。文章通过三大法宝(相对单位、媒体查询和窗口监听)详细介绍如何实现智能适配,并提供了多个实战案例,如宫格布局、对话框变形和自适应轮播图等。此外,还分享了调试技巧及工具推荐,帮助开发者快速上手并优化性能。最后鼓励读者实践探索,并提示更多官方资源等待发现。
|
6月前
|
关系型数据库 MySQL 数据库
基于Flink CDC 开发,支持Web-UI的实时KingBase 连接器,三大模式无缝切换,效率翻倍!
TIS 是一款基于Web-UI的开源大数据集成工具,通过与人大金仓Kingbase的深度整合,提供高效、灵活的实时数据集成方案。它支持增量数据监听和实时写入,兼容MySQL、PostgreSQL和Oracle模式,无需编写复杂脚本,操作简单直观,特别适合非专业开发人员使用。TIS率先实现了Kingbase CDC连接器的整合,成为业界首个开箱即用的Kingbase CDC数据同步解决方案,助力企业数字化转型。
1106 5
基于Flink CDC 开发,支持Web-UI的实时KingBase 连接器,三大模式无缝切换,效率翻倍!

热门文章

最新文章