0

我写了我的两个类

class RequestHandler(http.server.SimpleHTTPRequestHandler):

class Server(socketserver.TCPServer):

这样一个独特的服务器就可以处理常规的浏览器、ajax 和 websocket 请求。它工作正常。

我只是找不到终止服务器的方法。所以我杀死了这个过程。

[编辑] 当它收到来自浏览器的关闭请求时,我需要关闭服务器。我尝试设置self.__shutdown_requestTrue 但它不起作用。

此外,在我关闭浏览器并终止进程后,netstat 告诉我有一些套接字仍在使用服务器的端口,状态为 TIME_WAIT。所以我必须等他们死了才能再次使用同一个端口。

如何终止服务器?

有没有办法去掉那些插座?

4

2 回答 2

3

可能您可以尝试Server.shutdown关闭服务器的方法。正如 Python 文档所解释的,此方法告诉Server.serve_forever循环停止并等到它停止。顺便说一句,虽然您可以设置 SO_LINGER ON 以避免 TCP 套接字的 TIME_WAIT 状态,但不鼓励这样做。另一种方法是在绑定服务器端口之前设置 SO_REUSEADDR。

于 2013-10-15T12:11:15.457 回答
0

在终端窗口中使用以下命令终止 TCP 端口 28355 以停止 TIME_WAIT 套接字:

npx kill-port 28355

在我的 python 套接字服务器脚本中,我使用了以下几行:

import os os.system("npx kill-port 28355")

此命令解决了“地址已在使用”错误。这是我找到的所有其他解决方案中唯一解决该错误的解决方案,例如启用该SO_REUSEADDR选项。

于 2021-01-07T18:16:43.927 回答