求助socket客户端接收海量数据问题
socket客户端怎么接收服务器推送的海量数据写到内存中才能造成服务器不堵塞,大概每秒有30m的数据量。求帮助,求方案。注:本人通过多线程处理接收还是会造成服务器堵塞(代码中就只有通过MemCached写将数据写入内存中的代码)。 --------------------编程问答-------------------- 有没有试试提高buffer size?
setReceiveBufferSize
试试提到56k,默认好像只有8k及其影响速度
还有你是怎么多线程处理的? --------------------编程问答-------------------- 你是在工作中遇到socket吗 --------------------编程问答-------------------- 这个一般通过缓存机制。 --------------------编程问答-------------------- 30M每秒?给服务器和客户端装千兆网卡用光纤连接 --------------------编程问答-------------------- 30M每秒?给服务器和客户端装千兆网卡用光纤连接 --------------------编程问答-------------------- 服务器堵塞? 你这先要看网络带宽多少,网卡带宽,然后看操作系统网络模块底层的设定。比如,底层buffer或者窗口大小。backlog数量。然后看操作系统对用户的资源授权。然后再看程序。
另外,客户端接收数据服务端会堵塞?这是那门子设计。。服务端不是多线程的么?服务端一个线程在读取数据到客户端,你整个服务端阻塞?
你服务器是不是oom了?不是io阻塞,你是读取太多数据到内存,javaheap爆掉了?
--------------------编程问答-------------------- 要千兆网才能完成这种数据量的传输。
可以考虑的方案有:
一,换成千兆网,进行数据传输。
二,更改传输协议,将不必要的数据或相同的数据,省去不传输。(如果无效数据过多)
三,压缩后传输,传输后解压。(GZIP压缩效果好但压缩速度慢,ZIP快很多) --------------------编程问答-------------------- 底层传输,管道。 --------------------编程问答--------------------
表示同意,另外唠叨下,数据处理使用线程池进行处理,不要影响到主线程。
补充:Java , Java SE