因为业务需要,要在原有的系统上面添加一个对外接口,监听并接受外部发送过来的报文。
然后我第一时间想到的就是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);
}
}
}
}