请教socket发送大量数据延迟的问题

dombo 2011-03-02 06:24:37
服务器在某个时段会通过socket发送大量数据到20个客户端,从客户端的反应来延时很厉害,还有很严重的丢包,走tcp,从数据器的流量监测看到上行数据最高也不超过50K,也远没有达到服务器带宽的上限限制,不知为何。
服务器发送端采用的是异步发送,且每个发送sleep(10),请教原因,或者有什么设计需要注意的细节,新手,谢谢~
...全文
1630 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
mrsupersky 2011-03-05
  • 打赏
  • 举报
回复
再提个醒,就是注意一下内存的释放。。。。
mrsupersky 2011-03-05
  • 打赏
  • 举报
回复
如果你是用互联网测试的话,数据延时可能是你的网络带宽或者其他问题。。。
mrsupersky 2011-03-05
  • 打赏
  • 举报
回复
最好不要用Sleep,不是有BeginSend的吗?
干嘛不用那个。。。
虽然有点麻烦(其实也就多了一点点代码),但性能还是不错的。。。
fflyn 2011-03-05
  • 打赏
  • 举报
回复
使用UDP,在客户端自行实现包重组
java_1988 2011-03-05
  • 打赏
  • 举报
回复
如果是音频视频,尽量不要使用tcp。而且丢包在所难免。

不是吧。。。Axis开发的监控平台,全部是用TCP的。
dombo 2011-03-05
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 sp1234 的回复:]

如果是音频视频,尽量不要使用tcp。而且丢包在所难免。

正常的tcp通讯基本不存在丢包问题,不可能后边的数据正确接受了、前边的丢了。完全没有必要sleep,反而是,一旦看到sleep代码(你可能模模糊糊地似乎感觉到这样就少一些bug了)这说明程序有设计问题了。

既然客户端要接受较多信息,可以优化一下客户端程序:
1. 接收数据应该是异步的,并且接收数据的程序应该立刻释放线程(而不是……
[/Quote]

"你可能模模糊糊地似乎感觉到这样就少一些bug了",大哥说到点子上了,以前正是因为丢包更严重,所以我加了sleep,此时小数据传输时没有再出现丢包过,但是现在比如同时连续给20个客户端传20K的文本串,持续3个小时,丢包马上开始,我觉得可能是您说的我的设计有问题,因为对socket的理解现在还有限。
我的客户端的接收也是用的异步,不过确实在接收线程中做一些数据解析之类的操作,非常感谢您的解答,我再研究一下,谢谢~
  • 打赏
  • 举报
回复
如果一定要等待,那么你就去等到发送端的确认消息 --> 如果一定要等待,那么你就的发送端去等待对方确认消息
  • 打赏
  • 举报
回复
如果是音频视频,尽量不要使用tcp。而且丢包在所难免。

正常的tcp通讯基本不存在丢包问题,不可能后边的数据正确接受了、前边的丢了。完全没有必要sleep,反而是,一旦看到sleep代码(你可能模模糊糊地似乎感觉到这样就少一些bug了)这说明程序有设计问题了。

既然客户端要接受较多信息,可以优化一下客户端程序:
1. 接收数据应该是异步的,并且接收数据的程序应该立刻释放线程(而不是用接收线程去处理数据解析、更不是去做客户端用户操作处理)。这是最重要的。
2. 接收端有没有正确判断数据单元的结束。应该从信令设计上,把大块数据划分为很小的数据块单元。
3. 发送端编写sleep代码肯定是错误的,这没有可靠的设计根据。如果一定要等待,那么你就去等到发送端的确认消息,然后再继续发送下一个数据块。
konglong 2011-03-05
  • 打赏
  • 举报
回复
为什么不用客户端从服务器拽取资源呢?
dombo 2011-03-03
  • 打赏
  • 举报
回复
多谢楼上解答,已经采用的分包,保证单条发送的数据不超过2K,但是这种程度的流量发送最多可能会持续三到四个小时,不过印象中基本上只要一开始大量传输,没多久发送就会开始瘫痪了,但是马上把发送的数据换成小流量数据,所有20个客户端的接收又马上恢复正常
wuyq11 2011-03-02
  • 打赏
  • 举报
回复
分包发送
控制每次send的时间间隔。
有必须的话可以采用异步响应的试,等收到对方的响应之后再传下一部分。
TCP的连接控制协议只能在一定范围内控制流量,一旦流量过大,超过其网络负载,时间一长,缓存空间不够的时候数据丢失
dombo 2011-03-02
  • 打赏
  • 举报
回复
当发送的数据量小时则没有问题,一切正常~

110,546

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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