我最近做了局域网通信的项目,很多个客户端高频率(多的时候每一个客户端每一秒会向服务器发送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秒以上。
所以我考虑服务端如果用异步发送以及客户端用异步接收会不会情况好点?
我主要重视实时性。
有没有懂得朋友,还请帮忙指点,谢谢!!!
------解决思路----------------------
这种需求最好用异步,并且如果用 UDP 协议的话,最好加个 ack 处理,通知客户端你已经收到消息了,不然你的包很有可能传得不全。
------解决思路----------------------
http://www.cnblogs.com/dataexcel/archive/2012/12/09/2809045.html
这个我写的一个cs通信的。 采用的tcp。
如果你没有客户端对客户端的通信可以用用。
------解决思路----------------------
局域网应该同步接受数据,异步处理数据