请问,c#中udp同步接收和异步接收对实时性有影响吗?我该怎么选择

wwwww112233 2013-02-01 11:02:39
我最近做了局域网通信的项目,很多个客户端高频率(多的时候每一个客户端每一秒会向服务器发送5--10个消息)的向服务端发送数据,服务端处理数据后实时分发给每个客户端
其中,客户端与服务器的通信允许有少量丢包,但是必须尽量实时传输。
我现在是在客户端和服务端都是采用同步接收和发送数据的方式,例如服务端接收数据的代码是:
private void waitConn()
{
ConnServer = new UdpClient(1899);
IPEndPoint iep = new IPEndPoint(IPAddress.Any, 1899);
Conn conn = InitConn();
while (true)
{
Thread.Sleep(30);
byte[] bData = ConnServer.Receive(ref iep);
string s = Encoding.Default.GetString(bData, 0, bData.Length);
string s2 =doSomeThing(s);//这个函数很简单,不费时
SendGroup(s2, Group_IPEndPoint);//组播发送出去



这个系统现在运行了一段时间,我发现有时好像客户端的数据总有一些延迟很严重,奇怪的是我SendGroup是组播,对象有3--5个电脑,有的电脑马上就收到了,有的会延迟长达3秒以上。

所以我考虑服务端如果用异步发送以及客户端用异步接收会不会情况好点?
我主要重视实时性。

有没有懂得朋友,还请帮忙指点,谢谢!!!
...全文
628 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
ericmpdeng 2014-12-19
  • 打赏
  • 举报
回复
你最后到底怎么做的呢?
wwwww112233 2013-02-06
  • 打赏
  • 举报
回复
昨天使用同步接收并处理,异步发送的效果十分令人满意。 谢谢各位。
wwwww112233 2013-02-05
  • 打赏
  • 举报
回复
我自己总结下,假如我20个客户端向一个服务端发送数据,服务端接收数据后不做任何处理,直接转发给客户端(客户端分为5组,组播方式转发)。 而其中,每秒种内,一个客户端给服务端发送10次数据,那么20个客户端最大的时候每秒发送200次数据,而服务端除了要实时接收到这200次数据,现在不处理数据,直接组播(5个小组,即发送5次)把原始数据转回客户端。 我现在面临的问题如下: 1、20客户端应该以什么方式来send数据,同步还是异步? 2、服务端以什么方式来接收数据,同步还是异步?(先不考虑处理数据) 3、服务端组播的方式转发数据回客户端,那么客户端以什么方式接收回传的数据,同步还是异步? 我最开始全部是使用同步方式,发现有些时候某些客户端丢包以及延迟严重。 我前天修改程序,服务端同步接收数据,同时使用后台线程来异步处理数据并组播,效率比前面下降4、5倍。 我刚看了一个文章,现在又准备同步接收,异步发送,不知道效果如何 高手们请指点.....
showjim 2013-02-05
  • 打赏
  • 举报
回复
局域网应该同步接受数据,异步处理数据
wwwww112233 2013-02-05
  • 打赏
  • 举报
回复
昨天测试下来,服务端后台专门开一个线程处理并分发数据,客户端接收到数据比原来延迟4--5倍....
  • 打赏
  • 举报
回复
引用 6 楼 wwwww112233 的回复:
昨天一人说“如果消息处理时另外个线程的话,对于UDP来说还是同步的好”。
这是什么话?
wwwww112233 2013-02-04
  • 打赏
  • 举报
回复
引用 8 楼 sp1234 的回复:
引用 6 楼 wwwww112233 的回复:昨天一人说“如果消息处理时另外个线程的话,对于UDP来说还是同步的好”。 这是什么话?
谢谢。因为我说服务端处理消息的过程是很简单的,就是对一些字符串过滤而已,处理完后就组播分发给客户端。 然后那位大哥就说“如果消息处理时另外启动一个线程进行处理的话,对于UDP来说还是同步的好”。 小弟这方面没什么经验,我原先都是用同步接收同步发送的方式,后来发现某些客户端(同一局域网内)收到信息会延迟2--3秒,这就出了大问题。所以在考虑异步接收以及异步发送。 现在我把程序修改了,仍然是同步接收同步发送,只是在服务端同步接收数据后,我另外开起了一个线程task去处理数据并进行组播分发。 具体效果,还要实验一阵子看看。。大哥有什么建议没,谢谢!
wwwww112233 2013-02-04
  • 打赏
  • 举报
回复
引用 7 楼 zanfeng 的回复:
http://www.cnblogs.com/dataexcel/archive/2012/12/09/2809045.html 这个我写的一个cs通信的。 采用的tcp。 如果你没有客户端对客户端的通信可以用用。
谢谢!因为我这个服务器端接收数据处理之后,是通过组播方式分发出去的,所以要用udp。
足球中国 2013-02-03
  • 打赏
  • 举报
回复
http://www.cnblogs.com/dataexcel/archive/2012/12/09/2809045.html 这个我写的一个cs通信的。 采用的tcp。 如果你没有客户端对客户端的通信可以用用。
wwwww112233 2013-02-03
  • 打赏
  • 举报
回复
引用 5 楼 Sun_Jianhua 的回复:
这种需求最好用异步,并且如果用 UDP 协议的话,最好加个 ack 处理,通知客户端你已经收到消息了,不然你的包很有可能传得不全。
谢谢,昨天一人说“如果消息处理时另外个线程的话,对于UDP来说还是同步的好”。 我现在服务器端使用了同步接收,接收后开了一个后台进程task处理数据并分发数据。 具体效果要等实际应用实验....
铁拳 2013-02-03
  • 打赏
  • 举报
回复
这种需求最好用异步,并且如果用 UDP 协议的话,最好加个 ack 处理,通知客户端你已经收到消息了,不然你的包很有可能传得不全。
wwwww112233 2013-02-02
  • 打赏
  • 举报
回复
异步会比同步高效吗。。。。。。。
bdmh 2013-02-01
  • 打赏
  • 举报
回复
udp是不可靠连接
wwwww112233 2013-02-01
  • 打赏
  • 举报
回复
ding...........................

110,539

社区成员

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

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

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