0

我拥有的是一个监听客户端的多线程套接字服务器。为打开的连接创建并启动新线程。客户端可以通过 Runtime .exec() 方法请求服务器执行一些命令。接收到的任何新命令都由新线程处理(将 PrintWriter 作为参数传递),并且所有输出(std/err)都通过带有 PrintWriter 的套接字发送。

问题是当命令需要更长的时间(即守护程序)并且客户端由于任何原因断开连接时,我无法再获得输出。我需要找到一种从另一个连接上的命令执行线程获取输出的方法(新的客户端会话将在另一个线程上)。

我可以尝试将命令的所有输出发送到 System.out 并尝试使用 PrintWriter 通过套接字发送它(System.out)(我不知道该怎么做)。如果我成功了,也许有一种方法可以将所有这样的输出发送到每个连接的客户端。

但是,我将所有输出保存到数据库中,如果连接了多个客户端,我最终会在我的数据库中有多个输入。

请给我一些想法,让我知道如何解决这个问题。谢谢

4

2 回答 2

1

你可能想让你的调用异步。永远不应该同步执行持续时间未知的任务。

我会考虑使用“反应器”类型的服务器(即:每个客户端一个线程=快速死亡)并使用某种类型的消息传递机制进行长时间运行的事务。有很多中间件可以做这种工作,这真的取决于你在什么平台上。

顺便说一句,使用套接字连接在远程机器上执行命令是一个安全漏洞,但你可能已经知道了!

于 2012-06-08T09:02:36.693 回答
0

那么,您是否考虑过为每个连接使用会话 ID?此 ID 将与每次执行的输出相关联。因此,可以在同一用户的后续调用中检索到相同的输出。暂时可以将输出存储在存储库中(例如数据库、内存、文件)。

如果我没有正确回答您的问题,请纠正我。

于 2012-06-08T08:52:19.473 回答