0

我有一个标准的客户端/服务器设置。

我想构建的程序很像邮局(这是我的服务器)。多人(使用 ObjectOutputStream 的客户端)将带有附加地址的邮件交给办公室(使用单个 ObjectInputStream 的服务器),然后办公室将邮件发送到它应该去的地方。如果可能的话,我希望ObjectInputStream在服务器中有一个阻塞,等待“邮件”从任何ObjectOutputStream 进来,然后将“邮件”发送到它应该去的地方。这样我就可以只拥有一个完全专用于接收和发送数据的线程。

我将使用他们的 ObjectOutputStream 为每个人的客户端创建一个线程,但我希望在服务器中也不需要一个匹配的线程来与每个人进行通信。我对这个想法很感兴趣,因为我发现构建大量线程来单独处理连接是多余的,而在我的情况下,单个线程可能只会发送一次数据。

这可行吗?还是傻?

4

3 回答 3

3

使用 Java Message Service 的 JMS 队列,是本案例的设计模式。 http://en.wikipedia.org/wiki/Java_Message_Service

于 2013-04-22T08:37:13.323 回答
0

如果您在服务器应用程序中只有一个实例ObjectInputStream并且您有许多客户端,则该实例需要由所有线程共享,因此您需要同步对它的访问。

你可以在这里阅读更多。希望这可以帮助。

或者

您可以拥有一个ObjectInputStream实例池,并使用像 Round Robin ( doc ) 这样的分配算法,例如,您可以为每个 x 订单线程返回相同的实例......这将使服务器应用程序中的流程更加并行

于 2013-04-22T08:31:21.650 回答
0

你的问题没有意义。您需要一对单独的ObjectInputStreamand ObjectOutputStream perSocket。您需要一个Threadper Socket,,除非您准备好忍受轮询 via 的明显限制InputStream.available(),这不会阻止您的读取阻塞。如果您使用对象序列化,您已经承诺阻塞 I/O,因此每个 Socket 都有一个线程。

于 2013-04-22T10:30:31.880 回答