Python HTTP服务器 - 不使用HTTP模块创建

1 投票
2 回答
2198 浏览
提问于 2025-04-29 15:57

我可以不使用

python -m http.server [port number]

来创建一个HTTP服务器吗?

我想用传统的方式,比如用套接字之类的。

这是我最新的代码和遇到的错误……

import socketserver

response = """HTTP/1.0 500 Internal Server Error
Content-type: text/html

Invalid Server Error"""

class MyTCPHandler(socketserver.BaseRequestHandler):
    """
    The RequestHandler class for our server.

    It is instantiated once per connection to the server, and must
    override the handle() method to implement communication to the
    client.
    """


    def handle(self):
        # self.request is the TCP socket connected to the client
        self.data = self.request.recv(1024).strip()
        self.request.sendall(response)

if __name__ == "__main__":
    HOST, PORT = "localhost", 8000
    server = socketserver.TCPServer((HOST, PORT), MyTCPHandler)
    server.serve_forever()

类型错误:'str' 不支持缓冲区接口

暂无标签

2 个回答

0

当然可以,像Tornado这样的服务器已经是这样做的了。对于那些只能处理HTTP/1.0的GET请求,并且一次只能处理一个请求的简单测试服务器来说,只要你理解了HTTP协议的基本知识,这并不难。不过,如果你对性能有一点要求,那事情就会变得复杂得多。

1

当然可以这样做,但这真是个糟糕的主意——实际上,即使是 http.server 也不过是个玩具级别的实现。

你最好把想做的网页应用写成一个标准的 WSGI 应用(大多数 Python 的网页框架都是这样做的,比如 Django、Pyramid、Flask 等等),然后用一些适合生产环境的 HTTP 服务器来提供服务,这些服务器在 Python 中有很多选择。

我个人最喜欢的是 uWSGI,紧随其后的是 Gevent。

如果你想了解更多关于如何实现的内容,我建议你看看 CherryPy 服务器的源代码(http://www.cherrypy.org/)。虽然它没有前面提到的 uWSGI 强大,但它是一个用纯 Python 编写的不错的参考实现,可以通过线程池来服务 WSGI 应用。

撰写回答