首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >停止接受新的TCP连接而不删除任何现有的连接。

停止接受新的TCP连接而不删除任何现有的连接。
EN

Stack Overflow用户
提问于 2017-06-09 18:32:48
回答 4查看 2.3K关注 0票数 11

我有两个服务器监听一个负载均衡器后面的TCP端口。负载均衡器可以检测来自客户端的TCP连接尝试是否失败,并在不删除该连接的情况下将其重试到第二台服务器。我希望能够将这两台服务器中的任何一台进行维护,而不需要删除一个客户端集合。

我的服务器使用此代码处理客户端请求:

代码语言:javascript
复制
ServerSocketFactory ssf = ...
ServerSocket serverSocket = ssf.createServerSocket(60000);
try {
    while (true) {
        Socket socket = serverSocket.accept();
        ...// Do the processing
    }
} catch (IOException e) {
    ...
}
...

我最初的想法是添加一个布尔值,该布尔值将在应用程序关闭时设置,并在等待所有现有连接被处理和关闭时阻止新的serverSocket.accept()调用。但是,甚至在serverSocket.accept()调用之前就已经建立了新的连接。这是我在Wireshark上看到的,如果我在呼叫之前放置一个断点。

问题在于,当我调用serverSocket.close()时,所有这样的客户端连接都会被删除。我想要实现的是告诉ServerSocket停止接受所有新连接(即只发送新连接的RST或让它们超时),这样负载均衡器可以将它们重新路由到另一个服务器,但同时不丢弃任何已经建立的连接。

编辑:,我正在寻找一些自动化的解决方案,它不会要求我每次更新应用程序时都更改任何负载均衡器或操作系统设置。

EN

Stack Overflow用户

发布于 2017-06-13 02:00:27

ServerSocket.accept()块或ServerSocketChannel.accept()返回null的任何时候,待办事项队列都是空的。此时,停止接受并关闭侦听套接字。等待所有现有的可接受套接字完成它们的工作,然后让应用程序在此时退出。

票数 3
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44464617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档