socket接收数据,数据来不及处理的问题
我有个担心,就是接收数据端,来不及处理缓冲中的数据时,socket的buff会不会被爆掉或者后面的数据覆盖前面的数据?
查资料得到下面的答案:
1、如果用udp,得自己加缓冲队列和多线程,缓冲队列也要有限制,防止爆内存。多线程的多用只要是异步化网络I/O和业务流程,不相互阻塞,起几个线程看情况
2、如果用tcp,缓冲队列可以不要,因为tcp自动调速,你接收慢对端发送也会降速,这时候根基性能要求起多线程,尽量用线程池+IO多路转接,别简单的一个线程一个链接,尤其是连接可能比较多的时候
关于2,我不大确定他的回复是否靠谱,因为:
“你接收慢对端发送也会降速”---- 问题来了,缓冲发送出去的速度慢了,但是应用层可能还要继续往发送缓冲中投入数据,这样的话,发送端的缓冲不就可能就爆了吗?
果真看到下面一个回复:
”对于TCP缓冲队列也是必须的,网络层不断接收,投递到缓冲队列,处理线程从队列中提取任务并处理。
但是为了防止处理线程无法处理大量任务导致缓冲队列爆掉,必须设置一个阀值,当缓冲队列中任务的数量
超过这个阀值时,网络层停止recv,这可以使得发送方发送速度减缓,但是如果你的采样频率是固定的,发送速度
减缓可能又会导致发送方发送队列爆满。“
也就是下面这位建议TCP 也要缓冲队列
那么我应该相信哪一位? 另外收发端应该如何做这样的队列?大家都有什么有见解呢?有没有什么例子或者资料 欢迎告诉我
...全文
相关推荐
Socket接受数据超时
Socket接受数据超时,采用Callable 接口实现
Socket编程例子
Socket编程例子
C# TCP Socket 分包传送数据
C# TCP Socket 分包传送数据,这个代码也是从别的地方淘来的,用的还不错。
SOCKET客户端 发送数据例子
C写的客户端 封装了发送和接收的函数 和我上传的服务端是一套 SOCKET客户端 发送数据例子 C写的客户端 封装了发送和接收的函数 和我上传的服务端是一套 SOCKET客户端 发送数据例子
android在wifi下手机与电脑的socket通信
代码完整,手机做服务端,电脑做客户端;也可以反过来,电脑做服务端,手机做客户端。修改积分000000000000000000000000000


