Python TCPServer与HTTPServer
我正在编写一个简单的python3 Web服务器。我尝试过各种教程,都做得很好。然而,有一点我不明白 在一个教程中,他们使用HTTPServer的方式如下:Python TCPServer与HTTPServer,python,httpserver,tcpserver,Python,Httpserver,Tcpserver,我正在编写一个简单的python3 Web服务器。我尝试过各种教程,都做得很好。然而,有一点我不明白 在一个教程中,他们使用HTTPServer的方式如下: server = HTTPServer(('', PORT_NUMBER), myHandler) server.serve_forever() with socketserver.TCPServer(('', PORT_NUMBER), myHandler) as httpd: httpd.serve_forever() 在
server = HTTPServer(('', PORT_NUMBER), myHandler)
server.serve_forever()
with socketserver.TCPServer(('', PORT_NUMBER), myHandler) as httpd:
httpd.serve_forever()
在另一个教程中,他们使用socketserver.TCPServer,如下所示:
server = HTTPServer(('', PORT_NUMBER), myHandler)
server.serve_forever()
with socketserver.TCPServer(('', PORT_NUMBER), myHandler) as httpd:
httpd.serve_forever()
这两种方法的区别是什么?我只需要一个简单的Web服务器,它能够通过POST接收JSON文件,并使用另一个JSON接收aswer。在这两种情况下,我将使用相同的处理程序:
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'}")
其中一种方法更适合我的需要吗?是否有更好的方法编写此服务器以满足我的需要?
谢谢你的帮助和时间 TCP是一种OSI第4层传输协议,而HTTP是一种建立在TCP之上的更高的第7层应用协议 事实上,根据以下说明,它看起来像是直接从
socketserver.TCPServer
继承的:
一个类HTTPServer是socketserver.TCPServer子类。信息技术
创建并侦听HTTP套接字,将请求分派到
处理程序
例如,TCP将负责建立连接(与SYN
、SYN-ACK
和ACK
)的三方握手),但它实际上并没有在数据交互(请求/响应)的结构方面做太多规定。如果使用TCP协议,通常需要编写所有自己的数据处理代码
我所需要的只是一个能够接收JSON文件的简单Web服务器
通过POST和aswer与另一个JSON
这表明HTTP服务器更适合您的需要,因为POST
的概念,并且您对另一个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()
服务器实例化工作的一种常见模式似乎是
要实例化较低级别的协议服务器(即TCP)并传入较高级别的处理程序(如http.server.SimpleHTTPRequestHandler
),因此需要socketserver.TCPServer((“”,PORT),myhandler)
要在上下文管理器中使用它(和
关键字),很可能是因为您需要在服务器完成执行后拆除/释放资源
TCPServer
更为通用,它可以用于任何TCP协议,您必须自己编写应用程序代码HTTPServer
特定于HTTP协议。