- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个简单的 python3 网络服务器。我已经尝试了各种教程,并且都运行良好。尽管如此,还是有一点我不明白。
在一个教程中,他们使用 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'}")
其中一种方法是否更适合我的需要?有没有更好的方法来编写这个服务器来满足我的需要?
感谢您的帮助和时间!
最佳答案
TCP 是OSI 第 4 层传输协议(protocol),而 HTTP 是更高层的第 7 层应用协议(protocol),建立在 TCP 之上。
事实上,根据documentation,看起来HTTPServer
直接继承自socketserver.TCPServer
。 :
One class, HTTPServer, is a socketserver.TCPServer subclass. It creates and listens at the HTTP socket, dispatching the requests to a handler.
例如,TCP 将负责建立连接(使用SYN
、SYN-ACK
和ACK
的三向握手)但它在数据交互(请求/响应)的结构方面并没有真正规定太多。如果您使用 TCP 协议(protocol),您通常需要自己编写所有数据处理代码。
All I need is a simple webserver that is able to receive JSON files through POSTs and aswer with another JSON
这表明 HTTP 服务器更适合您的需求,因为 POST
的概念以及您对 answer with another JSON
的描述可能会包括响应(带有响应主体、响应 header 和响应状态)。所有这些都将是 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
关键字),很可能是因为您需要在服务器完成执行后拆除/释放资源。关于python - TCPServer 与 HTTPServer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58045415/
如何在 Ruby 中使用 TcpServer.new(0) 找到由 Windows 分配给 TcpServer 的端口 最佳答案 您可以使用 addr 获取它: tcp_server = TCPSer
我已经阅读了 Ruby 文档,但我并没有真正理解这两个对象之间的区别。 TCPServer.new(端口) 和 TCPServer.open("X.X.X.X", 端口) 我所知道的是 .new 仅响
我不得不为工作中的一个项目编写一个 TCP 服务器,我在谷歌上搜索了如何编写。我有一个 MSDN回答并设法让它工作,但我不知道如何让数据能够来回接收。 socket 的连接时间最多不会超过 30 秒(
import SocketServer import sys from Queue import * import threading class CustomTCPServer(SocketServ
python 2.7.2 window 7 32 位 让我以我对网络编程相当陌生作为这个问题的序言。我使用 python 的内置 SocketServer 创建了一个简单的服务器和客户端 Socket
我有一个正在编码的应用程序,用于通过 tcpsocket 将日志记录信息发送到服务器,并有一个监视器客户端连接到服务器以查看日志记录数据。到目前为止,我能够进入将信息发送到服务器的阶段,但是我需要一些
我正在尝试编写一个 c# 服务器/客户端,它将同时通过 TCP 相互发送字节数组。我正在努力思考如何实现这一目标。我见过的所有示例都在等待消息,然后发送响应。我需要同时进行交流。 我是否需要为服务器和
也许我把我的套接字编程方式搞混了,但像这样的东西不应该工作吗? srv = TCPServer.open(3333) client = srv.accept data = "" while (tmp
我目前仅使用标准库在 ruby 中实现一个简单的发布/订阅系统,客户端可以在其中订阅消息主题或将消息发布到主题,这些消息将发送给所有订阅者。我只使用标准的 TCPServer 并假设所有消息都在使
int main() { int sock, connected, bytes_recieved , true = 1; char send_data [1024] , recv_data[1
我正在尝试使用 jacoco 代理远程获取覆盖数据,并使用 Reset=true 重置服务器上的执行信息; 服务器上的jacoco java代理: JAVA_OPTIONS="${JAVA_OPTIO
我试图通过客户端的 GET 请求从 SocketServer 模块关闭 TCPServer,该请求在窗口关闭时发出,但是以下代码无法启动关闭: def show_webgl(data): im
我正在编写一个简单的 python3 网络服务器。我已经尝试了各种教程,并且都运行良好。尽管如此,还是有一点我不明白。 在一个教程中,他们使用 HTTPServer 如下: server = HTTP
目前我有一个 c# tcpclient 和一个 c++ tcpserver,但我只能从服务器端的流中读取字符,因此所有数据都将转换为字符。由于c++ char是一个有符号的8位整数,而c#客户端发送的
我一直在玩弄 Python 的 SocketServer: #!/usr/bin/python import SocketServer class EchoHandler(SocketServer.B
我正在创建一个仅在 Windows 操作系统上运行的客户端-服务器应用程序,每个 Windows 用户将一次连接到服务器。局域网使用DHCP,所以IP不固定。 我需要将字符串消息从 IdTCPServ
我尝试在客户端发送长度小于 255 的数据。 我尝试使用此协议(protocol)发送数据: Lenghth+String Byte+string sample : string = ABCD sen
我正在使用 Python 的 SocketServer.ThreadingTCPServer。现在我想知道在某个时刻连接了多少个客户端。 如何解决? 最佳答案 SocketServer.Threadi
我想创建一个 TCPserver 并根据需要向客户端发送/接收消息,而不是 TCPserver 的 OnExecute 事件。 发送/接收消息没有问题;我确实喜欢这样: procedure TForm
我需要有关 TCPServer 和 TcpClient 问题的帮助。我正在使用 Delphi XE2 和 Indy 10.5。 我根据一个流行的屏幕捕获程序制作了服务器和客户端程序: ScreenTh
我是一名优秀的程序员,十分优秀!