我有一个标准的客户机/服务器设置。
我想构建的程序的行为很像一个邮件办公室(这是我的服务器)。多个人员(带有ObjectOutputStream的客户端)将带有附加地址的邮件交给办公室(带有单个ObjectInputStream的服务器),办公室将邮件发送到它应该发送的地方。如果可能的话,我想在阻塞的服务器中有一个ObjectInputStream
,等待"邮件"从任何 ObjectOutputStream进入,然后将"邮件"发送到它应该去的地方。这样,我可以只有一个线程,完全致力于接收和发送数据。
我将有一个线程为每个人的客户端与他们的ObjectOutputStream,但不希望也需要一个匹配的线程在服务器上与每个人通信。我对这个想法很感兴趣,因为我发现建立大量的线程来单独处理连接是过度的,而在我的情况下,单个线程可能只发送一次数据。
这可行吗?或者只是傻?
使用Java消息服务的JMS队列,是本案例的设计模式。http://en.wikipedia.org/wiki/Java_Message_Service
如果您在服务器应用程序中只有一个ObjectInputStream
实例,并且您有许多客户端,那么该实例需要由所有线程共享,因此您需要同步访问它。
你可以在这里阅读更多。希望对你有帮助。
或
你可以有一个ObjectInputStream
实例池,并使用分配算法,如轮询(doc),你可以为每个x顺序线程返回相同的实例,例如…这将使服务器端应用程序中的流更加平行
你的问题没有意义。每个Socket
需要一对单独的ObjectInputStream
和ObjectOutputStream
。您还需要每个Socket,
都有一个 Thread
,除非您准备忍受通过InputStream.available()
轮询的明显限制,这不会阻止您的读取阻塞。如果你正在使用对象序列化,你已经承诺阻塞I/O,因此每个Socket一个线程。