我正在用Java创建一个客户端/服务器对,目前只支持通过PrintWriters和BufferedReaders围绕服务器和客户端IO流进行隔行扫描文本通信。
我想实现一个使用Image [Input / Output] Stream的函数,以设定的间隔从服务器向客户端发送BufferedImage。
问题在于我希望在单独的线程中发送/接收BufferedImages,以便客户端/服务器仍然可以发送/接收文本命令。
我可以创建多个流或套接字吗?如果是这样,这是最好的方式吗?
答案 0 :(得分:7)
使用单个套接字实现此目的的一种方法是通过连接到套接字的单个字节流多路复用各个流,这是BEEP的良好实现。
答案 1 :(得分:0)
是的,确保您可以根据需要创建任意数量的线程和套接字。请注意:不要忘记关闭套接字并保持线程创建过程受到控制:许多线程不会提高性能甚至可能导致系统停止运行。
可能你应该使用线程池。但这取决于您的申请。看看java.util.concurrency
包。
如果您有更具体的问题,请不要犹豫。
答案 2 :(得分:0)
多路复用流应该保留多个缓冲区。
读者应该通过多路复用流给它自己的缓冲区。多路复用流应在写操作期间增加每个缓冲区,并在读操作期间收缩所需的缓冲区。
单个倒带缓冲区更难管理,因为读者需要有状态,但如果不具备性能,通常更具可扩展性。
使用的特定连接协议是实现细节。网络套接字只是缓冲区,可用于实现多路复用流。在这种情况下,网络成为瓶颈。