我写了两个班级
class RequestHandler(http.server.SimpleHTTPRequestHandler):
class Server(socketserver.TCPServer):
以便唯一的服务器可以处理常规的browser-,ajax-和websocket请求。 它工作正常。
我只是找不到终止服务器的方法。所以我杀了这个过程。
[编辑]我需要在收到浏览器的关闭请求时关闭服务器。我尝试设置self.__shutdown_request
True,但它不起作用。
此外,在我关闭浏览器并终止进程后,netstat告诉我有一些套接字 使用服务器端口仍处于活动状态,具有TIME_WAIT状态。因此,我必须等待它们再次使用相同的端口才能消失。
如何终止服务器?
有没有办法删除这些套接字?
答案 0 :(得分:3)
可能您可以尝试方法Server.shutdown
来关闭服务器。正如Python文档所解释的那样,此方法告诉Server.serve_forever
循环停止并等待它。
顺便说一句,尽管您可以设置SO_LINGER以避免TCP套接字的TIME_WAIT状态,但不鼓励这样做。另一种方法是在绑定服务器端口之前设置SO_REUSEADDR。
答案 1 :(得分:0)
在终端窗口中使用以下命令杀死 TCP 端口 28355 以停止 TIME_WAIT 套接字:
npx kill-port 28355
在我的 python 套接字服务器脚本中,我使用了以下几行:
import os os.system("npx kill-port 28355")
此命令解决了“地址已在使用中”错误。这是我找到的所有其他解决方案中唯一解决错误的解决方案,例如启用 SO_REUSEADDR
选项。