上篇讲了,单台服务器处理的请求,也就是7千次差不多了【微软的数据是最高2.5万/秒】。 每秒7千次请求下的IIS 和ASP.NET的性能测试

这次介绍另外一个选择:UDP,虽然不可靠,但是速度绝对不错。

1、标准的UDP性能

用C/C#/Java在Dell 1950/Windows 2003上,100M带宽 。
性能都差不多: 60个字节的数据,1万/秒

用多个程序来跑加起来结果也是一样。 难道Windows对UDP速度有限制?

2、RAWSocket+UDP
C#写的,性能达到了4万/秒

3、RAWSocket+IP
C写的 ,性能达到了8万/秒

5、C++代码:

网上有的家伙代码写的太差了,应该至少不该有低级错误吧。IP/UDP的头的大小计算都有错误,害人啊。
http://www.experts-exchange.com/Programming/Languages/CPP/Q_20372735.html
1. struct udpheader *udph = (struct udpheader *) (datagram + (4*4));   //4*4 有问题,应该是20
2.iph->ip_len             = sizeof (struct ipheader) + sizeof (struct udpheader);// 应该加上htons
3.CheckSum可以不计算

5、C#代码:

           string IpString = "192.168.1.14";

            Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Udp);

            IPAddress remoteIp = IPAddress.Parse(IpString);

            int i = 0;

            //while (true)
            {

                string msg = string.Format(format, i++, DateTime.Now);

                Byte[] b = Encoding.ASCII.GetBytes(msg);

                Byte[] newB = new Byte[b.Length + 8];


                b.CopyTo(newB, 8);
                int src_prt = 6000;
                int dest_port = 1112;
                int tot_len = newB.Length;

                newB[0] = (Byte)(src_prt / 256);

                newB[1] = (Byte)(src_prt % 256);

                newB[2] = (Byte)(dest_port / 256);

                newB[3] = (Byte)(dest_port % 256);

                newB[4] = (Byte)(tot_len / 256);

                newB[5] = (Byte)(tot_len % 256);

                newB[6] = 0;

                newB[7] = 0;
               
                s.SendTo(newB, new IPEndPoint(remoteIp, dest_port));
            }



Posted on 2008-02-19 15:21  trywebservice  阅读(3501)  评论(9编辑  收藏  举报