高性能异步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
posted @ 2016-09-03 15:57  Joe·Zhou  阅读(920)  评论(4编辑  收藏  举报