关于发送、接收缓冲区的问题
客户端好办。将发送、接收缓冲区设得大一点,比如20M(可以吗?),这样就解决了传大数据的要求。
可是服务器端,要与成千上万个客户端通信,与每一个客户端都有一个TCP连接。如果每个Socket都设为20M缓冲区,那整个内存肯定不够。
可是我的程序,绝大部分时间,都是小数据通信。偶尔有大数据(比如传图片,视频、文件等等)。怎么办?
我想到的一种办法有这样几个,哪个可行?
一、还是在服务器端把每个TCP套接字缓冲区设为比较大(比如20M),虽然有成千上万个套接字。但每个缓冲区其实只是分配了地址空间,并没有物理内存被分配。所以内存仍然不会太紧张。只有在某个套接字要接受(或发送)较大数据时,才用到较多的缓冲区,才真正分配较多的物理内存。发送完,这些内在就可以重新被别的套接字缓冲区使用。
二、只在需要发送(或接收)大数据时,才把发送缓冲区(接收缓冲区)设得较大,完成后,重新把缓冲区设小(8K)。
三、只使用系统默认的8K小缓冲区。但是在程序里循环发送(或接收)。
三种方法哪个可行?