Tomcat中部署的应用关闭后,监听线程没有关闭,仍旧占用端口

skjanyou 发布于 2017/03/07 09:39
阅读 2K+
收藏 0

如何使用英特尔®oneAPI工具实现PyTorch 优化,直播火热报名中>>>

因为业务需要,要在原有的系统上面添加一个对外接口,监听并接受外部发送过来的报文。

然后我第一时间想到的就是Socket。然后试了试在写了个类,并在application.xml中配置了bean,结果发现会阻塞应用,导致应用无法成功启动,然后我就在这个里面又用到了线程,能够顺利启动,而且能够完成需求 。但是问题是ServerSocket.accept()这个方法会占用端口,即使在关闭应用之后还是占用这个端口,结果就导致重新启动应用会失败。

想问一下各位大神,有没有好的解决方案或者替代方案,再次谢谢大家了。

贴上代码:

public class MessageServer implements Runnable {
	private Logger logger = LoggerFactory.getLogger(MessageServer.class);
	private static ServerSocket serverSocket ;
	public void init(){
		try{
			serverSocket = new ServerSocket(2000);
		} catch (IOException e) {
			logger.error("启动用户验证服务失败",e);
			throw new RuntimeException("启动用户验证服务失败");
		}
		new Thread(this).start();
	}
	@Override
	public void run() {
		while(true){
			Socket socket = null;
			try {
				while((socket = serverSocket.accept()) != null ){
					new Thread(new UserCheckServer(socket)).start();
				}
			} catch (IOException e) {
				logger.error("连接失败",e);
			}
		}
	}

}

 

加载中
0
zheng_pat
zheng_pat

只要java进程呗关闭,理论上不会出现端口被占用。你确定tomcat服务停止之后,没有任何java进程,但是端口仍然在的吗

zheng_pat
zheng_pat
回复 @skjanyou : thread.setDaemon(true)
s
skjanyou
回复 @zheng_pat : 这个 要怎么设置呢 ?没用过 守护线程
zheng_pat
zheng_pat
回复 @skjanyou : 你的意思是应用停止之后你那个线程还活着?把他设置为守护线程试试
s
skjanyou
不是关闭tomcat之后端口还占用 ,是关闭部署在tomcat中的应用之后端口还是占用着,要是关闭tomcat的话,端口就关闭成功了。但是这个tomcat服务器中还有其他应用,所以就不能为了启动这个应用重启tomcat 了
0
origamiii
origamiii
该评论暂时无法显示,详情咨询 QQ 群:点此入群
0
origamiii
origamiii
该评论暂时无法显示,详情咨询 QQ 群:点此入群
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部