【发布时间】:2013-05-06 08:52:20
【问题描述】:
我正在编写 HTTP WEB SERVER 代码。同时,我必须编写有关使用端口的重试策略,以便在该端口上的服务器可以监听客户端的请求。
普通代码:
serversocket = new ServerSocket(ServerSettings.port);
如果ServerSettings.port 不是免费的,它会抛出异常。
现在,我想添加重试策略,如果ServerSettings.port 不是免费的,请尝试其他端口。为此我写了一段代码,代码如下,
更新代码:
try {
serversocket = new ServerSocket(ServerSettings.port);
} catch (IOException io) {
try {
ServerSettings.port += 505;
serversocket = new ServerSocket(ServerSettings.port);
} catch (IOException io1) {
try {
ServerSettings.port += 505;
serversocket = new ServerSocket(ServerSettings.port);
} catch (IOException io2) {
log.info(new Date() + "Problem occurs in binding port");
}
}
}
但上面的一个显示编码能力很差,而不是专业的。
如何以专业的方式为端口编写重试策略,以便服务器可以侦听该端口?
【问题讨论】:
-
也许将其包装在
while-loop中,检查boolean类型变量,以判断端口是否空闲?对象创建后:portIsFree = true,重试条件为portIsFree == false -
@GuyDavid 检查端口是否空闲的方法是什么?
-
ServerSocket如果未能使用给定的端口,将抛出异常,因此之后不会执行任何代码——它将通过设置portIsFree = true;的行,并跳转到@ 987654331@部分。循环将继续,因为portIsFree仍设置为false。 -
如果第一个端口失败,客户端如何知道服务器正在使用的其他端口?在您决定之前,担心如何编写服务器端是没有意义的。很可能你根本不应该有一个“重试策略”:只为服务器保留端口,如果它不可用,退出并让操作员处理它。
标签: java algorithm sockets http