TCP - это транспортный протокол уровня 4 OSI , тогда как HTTP - это протокол приложения более высокого уровня 7 , построенный поверх TCP.
На самом деле, похоже, что HTTPServer
наследуется напрямую от socketserver.TCPServer
, в соответствии с документацией :
Один класс, HTTPServer, является сокет-серверомПодкласс .TCPServer.Он создает и прослушивает сокет HTTP, отправляя запросы обработчику.
Например, TCP позаботится об установлении соединения (трехстороннее рукопожатие с SYN
, SYN-ACK
и ACK
) но на самом деле это не очень много прописывает с точки зрения структуры взаимодействия данных (запрос / ответ).Если вы используете протокол TCP, вам, как правило, нужно написать весь свой собственный код обработки данных.
Все, что мне нужно, - это простой веб-сервер, который может принимать файлы JSON через POST и aswer с другим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()
Часто шаблон экземпляра работы для сервера выглядит как
- Для создания экземпляра сервера протокола более низкого уровня (например, TCP) и передачи обработчика более высокого уровня (например,
http.server.SimpleHTTPRequestHandler
), следовательно, socketserver.TCPServer(("", PORT), myhandler)
. - Для использования его в диспетчере контекста.(
with
ключевое слово), скорее всего потому, что вам нужно разорвать / освободить ресурсы после того, как сервер завершит выполнение.