高性能异步Socket框架
Server:
using System; using System.Collections.Generic; using System.Diagnostics; using System.Text; using Spider.Network; namespace Spider.Server { class Program { static void Main(string[] args) { ServerConfig config=new ServerConfig() { BufferSize = 1024, Listeners = new List<ListenerConfig>() { new ListenerConfig() { Backlog = 1000, IP="any", Port=8080 } }, MaxConnection = 50000 }; AsyncTcpHost host=new AsyncTcpHost("server.cfg"); host.Use(async (ctx, next) => { Stopwatch watch = new Stopwatch(); watch.Start(); Console.WriteLine("1"); await next(); Console.WriteLine("4"); watch.Stop(); Console.WriteLine($"it's cost:{watch.ElapsedMilliseconds.ToString()}ms."); }).Use(async(ctx,next) => { Console.WriteLine("2"); if (ctx.StreamData!=null) { foreach (var data in ctx.StreamData) { Console.WriteLine(Encoding.UTF8.GetString(data)); } } await ctx.WriteStreamAsync(new List<byte[]>() { Encoding.UTF8.GetBytes("Hello Word!"), Encoding.UTF8.GetBytes("") }); Console.WriteLine("3"); await next(); }).Start(); Console.Read(); host.Stop(); } } }
Client:
using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Net; using System.Text; using System.Threading; using System.Threading.Tasks; using Spider.Network; namespace Spider.Client { class Program { static void Main(string[] args) { Stopwatch watch = new Stopwatch(); watch.Start(); Test(1); Console.WriteLine(watch.ElapsedMilliseconds.ToString()); Console.Read(); watch.Stop(); } private static async void Test(int count) { List<Task> list=new List<Task>(); for (int i = 0; i < count; i++) { var t=await Task.Factory.StartNew(async() => { using (var client=new TcpClient(IPAddress.Parse("127.0.0.1"), 8251, 1024)) { byte[] Fun(string msg) { StringBuilder buffer = new StringBuilder(); for (int k = 0; k < 50; k++) { buffer.Append(msg); } return Encoding.UTF8.GetBytes(buffer.ToString()); } //var bytes1=await client.RequestAsync(Fun("abc")); //var bytes2 = await client.RequestAsync(Fun("")); IList<byte[]> stream= await client.StreamRequestAsync(new List<byte[]>() { Encoding.UTF8.GetBytes(""), Encoding.UTF8.GetBytes("abc"), }); //Console.WriteLine(Encoding.UTF8.GetString(bytes1)); //Console.WriteLine(Encoding.UTF8.GetString(bytes2)); Console.WriteLine(Encoding.UTF8.GetString(stream[0])); Console.WriteLine(Encoding.UTF8.GetString(stream[1])); } }); list.Add(t); } Task.WaitAll(list.ToArray()); } } }
特别提醒:
如果发现任何问题和不足之处或者BUG请email给我:kingge163@163.com
https://files.cnblogs.com/files/kingge/HSocket.Core.Newest.Test.7z