站在巨人的肩膀是骗人的
2013年(28)
分类: C/C++
2013-04-06 09:27:27
moon_rock2013-04-11 10:10:36
sxcong:比较好的做法是socket收到数据,提交给业务,缓冲开在业务层。这样不影响IO。毕竟现在处理速度远大于网速,能不影响socket就尽量不影响。
是否ring buffer应该是业务层上要考虑的,以网络视频为例,收到数据后能否解码,和socket一点关系没有,把数据向解码器一交,回头继续收下一帧。所以,“所有socket可以共用缓冲”这个设想没太大必要。每个socket内部缺省的缓冲已经够用了。回头再强调,其实,socket应该只管网络事件,其他的数据收发处理都应该由上一层去做,比如epoll的ET模式,你不处理数据,socket马上就会给你颜色看看,它才不管数据往哪放。
视频这类流媒体和rpc在缓冲上处理肯定不同
回复 | 举报moon_rock2013-04-11 10:03:16
sxcong:比较好的做法是socket收到数据,提交给业务,缓冲开在业务层。这样不影响IO。毕竟现在处理速度远大于网速,能不影响socket就尽量不影响。
是否ring buffer应该是业务层上要考虑的,以网络视频为例,收到数据后能否解码,和socket一点关系没有,把数据向解码器一交,回头继续收下一帧。所以,“所有socket可以共用缓冲”这个设想没太大必要。每个socket内部缺省的缓冲已经够用了。回头再强调,其实,socket应该只管网络事件,其他的数据收发处理都应该由上一层去做,比如epoll的ET模式,你不处理数据,socket马上就会给你颜色看看,它才不管数据往哪放。
可能我没写明白,我说的socket缓冲是针对rpc的。
回复 | 举报sxcong2013-04-11 09:42:36
比较好的做法是socket收到数据,提交给业务,缓冲开在业务层。这样不影响IO。毕竟现在处理速度远大于网速,能不影响socket就尽量不影响。
是否ring buffer应该是业务层上要考虑的,以网络视频为例,收到数据后能否解码,和socket一点关系没有,把数据向解码器一交,回头继续收下一帧。所以,“所有socket可以共用缓冲”这个设想没太大必要。每个socket内部缺省的缓冲已经够用了。回头再强调,其实,socket应该只管网络事件,其他的数据收发处理都应该由上一层去做,比如epoll的ET模式,你不处理数据,socket马上就会给你颜色看看,它才不管数据往哪放。