如何在客户端和服务器之间建立多个IO流?

我正在用Java创建一个客户端/服务器对,目前只支持通过PrintWriters和BufferedReaders进行隔行扫描的文本通信,这些通信包裹在服务器和客户端的IO流中。

我想实现一个函数,它使用Image [Input / Output] Stream以一定的间隔从服务器向客户端发送BufferedImage。

问题是我希望在单独的线程中发送/接收BufferedImages,以便客户端/服务器仍然可以发送/接收文本命令。

我可以创建多个流或套接字吗? 如果是这样,那是最好的方法吗?

使用单个套接字实现此目的的一种方法是通过连接到套接字的单个字节流多路复用各个流,这是BEEP的一个很好的实现。

是的,确保您可以根据需要创建任意数量的线程和套接字。 请注意:不要忘记关闭套接字并保持线程创建过程受到控制:许multithreading不会提高性能甚至可能导致系统停止运行。

可能你应该使用线程池。 但这取决于您的申请。 看一下java.util.concurrency包。

如果您有更具体的问题,请不要犹豫。

多路复用流应该保持多个缓冲区。

读者应该通过多路复用流给它自己的缓冲区。 多路复用流应在写操作期间增长每个缓冲区,并在读操作期间收缩所需的缓冲区。

单个倒带缓冲区更难管理,因为读取器需要是有状态的,但如果不是高性能的话,通常更具可伸缩性。

使用的特定连接协议是实现细节。 网络套接字只是缓冲区,可用于实现多路复用流。 在这种情况下,网络成为瓶颈。