我正在编写一个简单的python3 webserver服务器。我已经尝试过各种教程,而且都工作得很好。然而,有一个区别,我不明白。
在一个教程中,他们使用HTTPServer如下所示:
server = HTTPServer(('', PORT_NUMBER), myHandler)
server.serve_forever()在另一个教程中,他们使用socketserver.TCPServer如下所示:
with socketserver.TCPServer(('', PORT_NUMBER), myHandler) as httpd:
httpd.serve_forever(),这两种方法之间有什么区别呢?我所需要的只是一个简单的服务器,它能够通过POST接收JSON文件,并使用另一个JSON。在这两种情况下,我都会使用相同的处理程序:
class myHandler(BaseHTTPRequestHandler):
def _set_headers(self):
self.send_response(200)
self.send_header('Content-type', 'application/json')
self.end_headers()
def do_GET(self):
self._set_headers()
self.wfile.write("{dummy:'dummy'}")
def do_POST(self):
# Doesn't do anything with posted data for this example
self._set_headers()
self.wfile.write("{dummy:'dummy'}")中的一种方法更适合我的需求吗?有更好的方法来编写这个服务器来满足我的需求吗?
谢谢你的帮助和时间!
发布于 2019-09-22 02:19:55
TCP是OSI第4层传输协议,而HTTP是建立在TCP之上的高级7层应用程序协议。
事实上,根据HTTPServer的文档,它看起来像是直接从socketserver.TCPServer继承的
一个类,HTTPServer,是一个socketserver.TCPServer子类。它在HTTP套接字上创建和侦听,将请求分派给处理程序。
例如,TCP将负责建立一个连接(与SYN、SYN-ACK和ACK的三方握手),但在数据交互的结构(请求/响应)方面并没有规定太多。如果使用TCP协议,通常需要编写自己的所有数据处理代码。
我所需要的只是一个简单的with服务器,它能够通过POST接收JSON文件,并与另一个JSON一起使用
这表明HTTP服务器更适合您在这里的需要,因为POST的概念,并且您对answer with another JSON的描述可能包括响应(带有响应主体、响应头和响应状态)。所有这些都是HTTP概念。作为http.server. BaseHTTPRequestHandler的文档,它将包含一个名为command的实例变量,它是您的请求方法(例如,GET)。
我不清楚在示例代码中如何分配myhandler,但是看看其他一些文档示例,它看起来就像一个http.server.SimpleHTTPRequestHandler
import http.server
import socketserver
PORT = 8000
Handler = http.server.SimpleHTTPRequestHandler
with socketserver.TCPServer(("", PORT), Handler) as httpd:
print("serving at port", PORT)
httpd.serve_forever()服务器实例化工作的一种常见模式似乎是
http.server.SimpleHTTPRequestHandler),从而获得socketserver.TCPServer(("", PORT), myhandler)。with关键字)中使用它,很可能是因为您需要在服务器完成执行后删除/释放资源。https://stackoverflow.com/questions/58045415
复制相似问题