【发布时间】:2012-06-12 07:45:11
【问题描述】:
我拥有的是一个监听客户端的多线程套接字服务器。为打开的连接创建并启动新线程。客户端可以通过 Runtime .exec() 方法请求服务器执行一些命令。收到的任何新命令都由新线程处理(将 PrintWriter 作为参数传递),所有输出(std/err)都通过 PrintWriter 通过套接字发送。
问题是,当命令需要更长的时间(即守护程序)并且客户端由于任何原因断开连接时,我无法再获得输出。我需要找到一种从另一个连接上的命令执行线程获取输出的方法(新的客户端会话将在另一个线程上)。
我可以尝试将命令的所有输出发送到 System.out,并尝试使用 PrintWriter 通过套接字发送它(System.out)(我不知道该怎么做)。如果我成功了,也许有一种方法可以将所有这样的输出发送到每个连接的客户端。
但是,我将所有输出保存到数据库中,如果连接了多个客户端,我最终会在我的数据库中有多个输入。
请给我一些想法,让我知道如何解决这个问题。谢谢
【问题讨论】:
-
我认为创建另一个服务器来监听和存储前多线程服务器的输出可以解决问题。当没有连接时,将输出临时存储在文件中,并在重新连接后重新传输所有内容。这样我就不会丢失任何输出,并且仍然可以使用许多客户端来发出命令。客户端仅显示其连接的输出,不必将其存储在 db 中(以避免重复条目)。
标签: java sockets system.out