Преглед изворни кода

NetworkStream 测试,性能很强, 10W个封包来回只需要3秒
我用linux c++差不多也就每秒4W多的封包

tanghai пре 11 година
родитељ
комит
40e4d0d7d5
2 измењених фајлова са 19 додато и 13 уклоњено
  1. 4 4
      CSharp/Platform/TNet/TcpAcceptor.cs
  2. 15 9
      CSharp/Platform/TNetTest/TcpAcceptorTest.cs

+ 4 - 4
CSharp/Platform/TNet/TcpAcceptor.cs

@@ -10,11 +10,11 @@ namespace TNet
 	    private readonly Socket socket;
 		private readonly SocketAsyncEventArgs asyncEventArgs = new SocketAsyncEventArgs();
 
-	    public TcpAcceptor(ushort port, int backLog = 100)
+	    public TcpAcceptor(string ip, ushort port, int backLog = 100)
 	    {
 			this.socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
-			this.asyncEventArgs.Completed += OnArgsCompletion;
-			this.socket.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), port));
+			this.asyncEventArgs.Completed += OnArgsCompletion;
+			this.socket.Bind(new IPEndPoint(IPAddress.Parse(ip), port));
 			this.socket.Listen(backLog);
 	    }
 
@@ -55,7 +55,7 @@ namespace TNet
 			return tcs.Task;
 	    }
 
-	    private void OnArgsCompletion(object sender, SocketAsyncEventArgs e)
+	    private static void OnArgsCompletion(object sender, SocketAsyncEventArgs e)
 	    {
 			var tcs = (TaskCompletionSource<NetworkStream>)e.UserToken;
 

+ 15 - 9
CSharp/Platform/TNetTest/TcpAcceptorTest.cs

@@ -14,7 +14,7 @@ namespace TNetTest
 	{
 		private const ushort port = 11111;
 		private int count;
-		private readonly Barrier barrier = new Barrier(100);
+		private readonly Barrier barrier = new Barrier(2);
 		private readonly object lockObject = new object();
 
 		[TestMethod]
@@ -25,7 +25,7 @@ namespace TNetTest
 
 			Thread.Sleep(2);
 
-			for (int i = 0; i < 99; ++i)
+			for (int i = 0; i < 1; ++i)
 			{
 				var thread = new Thread(this.Client);
 				thread.Start();
@@ -43,9 +43,12 @@ namespace TNetTest
 					try
 					{
 						var bytes = "tanghai".ToByteArray();
-						await ns.WriteAsync(bytes, 0, bytes.Length);
-						int n = await ns.ReadAsync(bytes, 0, bytes.Length);
-						Assert.AreEqual(7, n);
+						for (int i = 0; i < 100000; ++i)
+						{
+							await ns.WriteAsync(bytes, 0, bytes.Length);
+							int n = await ns.ReadAsync(bytes, 0, bytes.Length);
+							Assert.AreEqual(7, n);
+						}
 					}
 					catch (Exception e)
 					{
@@ -58,9 +61,9 @@ namespace TNetTest
 
 		private async void Server()
 		{
-			using (var tcpAcceptor = new TcpAcceptor(port))
+			using (var tcpAcceptor = new TcpAcceptor("127.0.0.1", port))
 			{
-				while (count != 99)
+				while (count != 1)
 				{
 					NetworkStream ns = await tcpAcceptor.AcceptAsync();
 					// 这里可能已经不在Server函数线程了
@@ -74,8 +77,11 @@ namespace TNetTest
 			try
 			{
 				var bytes = new byte[1000];
-				int n = await ns.ReadAsync(bytes, 0, 100);
-				await ns.WriteAsync(bytes, 0, n);
+				for (int i = 0; i < 100000; ++i)
+				{
+					int n = await ns.ReadAsync(bytes, 0, 100);
+					await ns.WriteAsync(bytes, 0, n);
+				}
 				lock (lockObject)
 				{
 					++count;