zoukankan      html  css  js  c++  java
  • 高性能异步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
  • 相关阅读:
    模块化
    ES6中的let
    ES6中的块级作用域
    Mobile 移动端
    H5离线缓存
    nginx 配置步骤
    虚拟路径的配置
    Apache和php的相关配置
    TCP/IP协议
    PHP中的文件操作
  • 原文地址:https://www.cnblogs.com/kingge/p/5837300.html
Copyright © 2011-2022 走看看