我正在做一个大学作业,我必须午餐3个服务器处理客户和一个服务器组的领导,这里是场景:
问题是在客户端发出3或4个请求后,服务器挂起,只有当领导者终止时才完成其工作。如果我从cmd手动运行jar文件,一切正常,只有当领导者通过进程午餐jar文件时,问题才会出现。
下面是一些代码 - 服务器主节点,它接受来自组的领导者或要服务的客户端的任何新连接:
public void startServer () throws IOException{
//new LogSetup ( "logs/server/server.log" , Level.ALL );
this.serverStatus = ServerStatuses.UNDER_INITIALIZATION;
running = initializeServer ();
if ( serverSocket != null ) {
while ( isRunning () ) {
try {
Socket client = serverSocket.accept ();
ConnectionThread connection = new ConnectionThread (
client , this );
new Thread ( connection ).start ();
logger.info ( "new Connection: Connected to "
+ client.getInetAddress ().getHostName ()
+ " on port " + client.getPort () );
} catch ( IOException e ) {
logger.error ( "Error! "
+ "Unable to establish connection. \n" , e );
}
}
}
logger.info ( "Server stopped." );
}
用于新连接的线程:
public void run () {
try {
output = clientSocket.getOutputStream ();
input = clientSocket.getInputStream ();
while ( isOpen ) {
try {
AbstractMessage msg = receiveMessage ();
handleRequest ( msg ); // to determine the connection type
/*
* connection either terminated by the client or lost due to
* network problems
*/
} catch ( IOException ioe ) {
logger.error ( "Error! Connection lost!" +ioe.getStackTrace ());
isOpen = false;
}
}
} catch ( IOException ioe ) {
logger.error ( "Error! Connection could not be established!" , ioe );
} finally {
try {
if ( clientSocket != null ) {
input.close ();
output.close ();
clientSocket.close ();
}
} catch ( IOException ioe ) {
logger.error ( "Error! Unable to tear down connection!" , ioe );
}
}
logger.info ( "exit the thread" );
}
private void handleRequest ( AbstractMessage msg ) throws IOException {
logger.info ( "inside handling abstract message" );
if ( msg.getMessageType ().equals ( MessageType.CLIENT_MESSAGE ) ) {
handleClientRequest ( ( ClientMessage ) msg );
} else if ( msg.getMessageType ().equals ( MessageType.SERVER_MESSAGE ) ) {
handleServerRequest ( ( ServerMessage ) msg );
} else if ( msg.getMessageType ().equals ( MessageType.ECS_MESSAGE ) ) {
handleECSRequest ( ( ECSMessage ) msg );
}
logger.info ( "finish handling " );
}
领导流程必须处理来自服务器的输入/输出/错误。当服务器记录某个内容时,它会写入System。out(这是大多数日志框架的默认行为)。由于您的领导启动了服务器进程,因此输出将写入管道。如果管道缓冲区已满,日志将阻塞,服务器将“挂起”。
问题内容: Python版本:2.6.7 我在for循环中有以下subprocess.call,该循环被执行18次,但是,该过程始终挂在第19个循环上: 控制台输出如下所示: 由于我对python脚本不是很熟悉,所以我只是在徘徊我是否在做错什么…我怀疑某个地方出现了死锁。 会处理这些问题吗? 在什么情况下subprocess.call会挂起任何专家答案?非常感谢 问题答案: 当使用子过程时,我倾向
问题内容: 我尝试完成的任务是流式处理ruby文件并打印输出。(注意:我不想一次打印出所有内容) main.py puts “hello” 问题 流文件工作正常。打招呼/再见输出将延迟2秒打印。就像脚本应该工作一样。问题是readline()最终挂起并且永不退出。我从来没有达到最后的打印。 我知道这里有很多类似的问题,但是这些都不是让我解决问题的方法。我并不是整个子流程中的人,所以请给我一个更实际
问题内容: 首先了解应用程序的一些背景知识。我有一个应用程序通过线程池并行处理许多独立的任务。现在线程池正在挂起。 以下是我的线程转储的摘录,我的pool-2中的所有线程都被“ pool-2-thread-78”阻止了。尝试写入控制台似乎已锁定,我觉得这很奇怪。谁能为我说明情况? 编辑 :平台详细信息Java版本“ 1.6.0_07” Java(TM)SE运行时环境(内部版本1.6.0_07-b0
问题内容: 我正在用javaFx编写天气应用程序,以从openweather.org获取数据。从openweather获取JSON的整个代码运行良好,也可以将JSON数据转换为对象。我用lambda表达式来实现在。问题是:如果我运行Main class,请按按钮,该应用程序将挂起。导入数据的线程有效(在控制台上通过2次打印检查),主线程“跳过” 并在控制台上打印某些内容。我不确定这里出什么问题了。
问题内容: 我一直在尝试使用Java的ProcessBuilder在Linux中启动应“长期”运行的应用程序。该程序的运行方式是启动命令(在本例中,我正在启动媒体播放应用程序),允许其运行并检查以确保它没有崩溃。例如,检查PID是否仍处于活动状态,然后重新启动该进程(如果已终止)。 我现在遇到的问题是PID在系统中仍然有效,但是应用程序的GUI挂起了。我尝试将ProcessBuilder(cmd)
我正在使用在线程上运行的 SurfaceView 类中的画布。SurfaceView 由 Activity (setContentView(surfaceview)) 调用。当屏幕关闭时,它会通过一个 pause() 方法关闭所有循环变量等。 奇怪的是:虽然在我的平板电脑(Android 4.4.2)线程暂停和恢复正确(线程重新开始),但是在我的手机(Android 4.2.2)和其他人的手机(C