社区
C#
帖子详情
请教socket发送大量数据延迟的问题
dombo
2011-03-02 06:24:37
服务器在某个时段会通过socket发送大量数据到20个客户端,从客户端的反应来延时很厉害,还有很严重的丢包,走tcp,从数据器的流量监测看到上行数据最高也不超过50K,也远没有达到服务器带宽的上限限制,不知为何。
服务器发送端采用的是异步发送,且每个发送sleep(10),请教原因,或者有什么设计需要注意的细节,新手,谢谢~
...全文
1630
15
打赏
收藏
请教socket发送大量数据延迟的问题
服务器在某个时段会通过socket发送大量数据到20个客户端,从客户端的反应来延时很厉害,还有很严重的丢包,走tcp,从数据器的流量监测看到上行数据最高也不超过50K,也远没有达到服务器带宽的上限限制,不知为何。 服务器发送端采用的是异步发送,且每个发送sleep(10),请教原因,或者有什么设计需要注意的细节,新手,谢谢~
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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的理解现在还有限。
我的客户端的接收也是用的异步,不过确实在接收线程中做一些数据解析之类的操作,非常感谢您的解答,我再研究一下,谢谢~
以专业开发人员为伍
2011-03-05
打赏
举报
回复
如果一定要等待,那么你就去等到发送端的确认消息 --> 如果一定要等待,那么你就的发送端去等待对方确认消息
以专业开发人员为伍
2011-03-05
打赏
举报
回复
如果是音频视频,尽量不要使用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
打赏
举报
回复
当发送的数据量小时则没有问题,一切正常~
Socket
编程快速入门
本课程将理本课程将理啊 论结合实践,带你从零开始,系统学习
Socket
编程技术,让
Socket
的学习不再那么零散与难以掌握,同时会提炼出
Socket
网络传输的核心思想与构架,并带你踩坑出坑,增加你的分析与处理
问题
的啊aas...
某种情况下造成服务器
发送
消息无比
延迟
的原因
大家好!小弟最近在学习erlang,熟悉代码做了一个消息转发的server,但是在测试性能的时候遇到一个
问题
,
请教
各位,是哪里的
问题
,谢谢! 我开发的消息转发server的功能: Aclient Bclient都连入Server,都并加入一个组C,Aclient向C组发一条消息,Server负责将消息发给C组内除了A外的其他Client,也就是B。开发没用OTP这些高级东西。SOCKE
OverLapped I/O
Socket
的
问题
OverLapped I/O
Socket
的
问题
Linux下
socket
多人聊天室
前言 由于疫情原因,在家上了一学期的课,本次作业是作为“Linux程序设计”的期末考核而布置的,代替了原本的考试,对于我这种比较喜欢动手的菜鸡来说,很舒服。 一、聊天室的实验内容 本作业实现一个基于Linux的模拟即时通信系统,要求实现以下功能: 1、模拟即时通信系统可以实现多人同时在线聊天功能; 2、在线聊天用户登录本系统需输入用户名和密码; 3、本系统需能够查询历史聊天记录; 4、本系统运行后,需启动一个守护进程,该守护进程记录本系统启动和关闭的时间,每个用户登录和退出时间;(日志) 5、需创建本系统的
socket
独奏 博客园首页新闻新随笔联系管理订阅 随笔- 183 文章- 0 评论- 12 Linux网络编程入门 (转载) (一)Linux网络编程--网络知识介绍 Linux网络编程--网络知识介绍 客户端和服务端 网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器
C#
110,546
社区成员
642,581
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章