- 论坛徽章:
- 1
|
w_anthony 发表于 2014-07-11 14:41 ![]()
抓包工具看到TCP重传这有什么奇怪的,这不是正常现象吗?如果代码写得没有问题,我敢说你一次send比分多次s ...
抓包工具看到TCP重传这有什么奇怪的,这不是正常现象吗?如果代码写得没有问题,我敢说你一次send比分多次send的总耗时只会少不会多(即小于等于)。
没错, 分多次send的消耗肯定会大.
而且貌似你的心跳机制也有问题,既然有数据待发送,那么根本不需要心跳包(发送缓冲区有数据还要心跳有什么用,心跳是为了维护没数据时候的连接状态,应该做一个判断),对端也是一样,既然一直有收到数据,就不需要依赖心跳机制来判断对方是否还连接着。
这个心跳确实有点多余, 但是不会有多少数据量, 所以这样实现问题也不大吧
还有什么叫后面的数据包卡住了?我不知道你的代码流程是什么样的,听起来难道是你的一端向对端发送数据,必须等到对端响应发回一个“表示自己已收到”的数据包,才会继续发送下一段吗?如果是这样的话,你的TCP做得也真是太非主流了,完全没发挥TCP应有的性能。如果不需要对端响应,都是直接发送,那么不管怎样分片,实际上并没有什么区别,除非在传文件的时候,还有其它业务逻辑需要并行处理,这样的话应该另外开一个连接专门传输文件数据为好。
"后面的数据包卡住", 我的意思是说, 比如服务端send了10个包, 第三个包发生重传了, 在这个包能被客户端应用程序正常接收到之前,第4到第10个包都不会被客户端的应用程序收到, 这时客户端的表现就好像数据卡住了. 那个包不停的重传, 最后连心跳都超时了. 现在我们传文件确实也是新开了连接, 现在的问题就是这条连接不太稳定, 观察到的现象就是包发送的小一点, 重传会少很多, 就不会出现数据卡住的情况. 我发这个贴就是想跟大家请教下这个问题的解决方法. |
|