求救:分包发送接收时不时出现15-16ms延时

tangrh 2004-07-17 05:48:33
各位winsock高手:
我的winsock程序TCP服务端是完成端口+重叠I/O,客户端是异步事件,分包发送接收(每包8k),测试时发现,一般情况下发送或接收一包都不费时,间歇性出现那种15-16ms的延时,不知道问题出在服务端还是客户端。
另外我把每包改成16k,发现服务端第一次收总是收8760字节,而且这个延时总是32ms左右。
哪位高手分析分析,主要是讲讲哪些地方可能会费时间,现在我的程序在本地测试,客户端和服务器之间完成一个10M数据来回,速度为600M左右,感觉快了,但还是被老板说速度慢。
我服务端监控完成包的线程并不负责进行重叠操作,而是由专门的线程来进行,这两线程中的同步工作由信号量来完成。而客户端在接收和发送时不干别的事,不停的等待网络事件。
...全文
199 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
tangrh 2004-08-04
  • 打赏
  • 举报
回复
问题解决,散了
DentistryDoctor 2004-08-02
  • 打赏
  • 举报
回复
理论上一个IP包的大小最大为65536-sizeof(TCP头)-sizeof(UDP)头=65472,至于链路怎么分包,那是IP层其以下层的事了,我测试这个包越大Socket的性能越好(完成端口),在我的测试中一般一次性接收到的数据大小为11320左右,其实你的包比较大时(即便采用阻塞方式),接收端都有个拼接过程。至于延迟,如果在本机测试,是大了点,但如果在网络环境中测试,这很正常。在本机测试一般来说来说100~200Mbps算正常范围,当然跟机器的配置有关系。这些数据都是在我机器上得出的。
tangrh 2004-07-31
  • 打赏
  • 举报
回复
哈哈,我现在局域网里达到11m多了
footway 2004-07-31
  • 打赏
  • 举报
回复
够快了。将来你的程序在广域网上运行时,瓶颈是网络的带宽,而不是你的程序的效率。
danielzhu 2004-07-31
  • 打赏
  • 举报
回复
强!
tangrh 2004-07-19
  • 打赏
  • 举报
回复
to jzyhummel(刀锋[篱影]) :
600M是本地测试啊,这个速度大约相当于百兆局域网的6倍啊,局域网内试的话我大概算了算不到90M(bit)
自由的风 2004-07-18
  • 打赏
  • 举报
回复
肯定不是600秒,10分钟啊,把一头牛从一楼抗到五楼时间也够了呀
sharkhuang 2004-07-18
  • 打赏
  • 举报
回复
把你的socket缓冲开大试试!再调整你的程序结构!效率问题可能是你的程序引起的!不是协议栈
sharkhuang 2004-07-18
  • 打赏
  • 举报
回复
他的意思是600秒吧!
自由的风 2004-07-18
  • 打赏
  • 举报
回复
客户端和服务器之间完成一个10M数据来回,速度为600M左右,感觉快了,但还是被老板说速度慢。
=======================================================================
你是不是把K写成M了,哪有600M的

个人觉得你包太大了,说说底层的事,你那么一个大包去了,接受那边会受到一个PACKET,因为网络包有大小限制,所以PACKET里面有很多个buffer以链表形式存放,在NDIS层需要组包,然后才发到TDI层,所以组包就浪费时间了

个人观点,供参考
starcbh 2004-07-18
  • 打赏
  • 举报
回复
你的内存管理是是怎么做的

如果是alloc-free-alloc...的话

一次8760,几十M的东西……次数太多,在这里会费点时间
名牌大灰狼 2004-07-17
  • 打赏
  • 举报
回复
这不是客户和服务器的事. 因为在网络里传输.有延时很正常的吗.应该把问题放在怎么收全所以的包和怎么把包装起来.
老板当然要说慢了.你就是在快也要说慢.哈哈
其它的就听高手说吧
m_syb 2004-07-17
  • 打赏
  • 举报
回复
你的包太大了吧
8K、16K,默认的TCP/IP 包有怎么大吗?
还请高手赐教

18,357

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧