Python HTTP服务器 - 不使用HTTP模块创建
我可以不使用
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 应用。