コード例 #1
0
        static void Net_Test12_AcceptLoop2(int port = 80)
        {
            new ThreadObj(param =>
            {
                ThreadObj.Current.Thread.Priority = System.Threading.ThreadPriority.Highest;
                int last = 0;
                while (true)
                {
                    int value = Environment.TickCount;
                    int span  = value - last;
                    last      = value;
                    long mem  = mem = GC.GetTotalMemory(false);
                    try
                    {
                        Console.WriteLine("tick: " + span + "   mem = " + mem / 1024 / 1024 + "    sock = " + LocalNet.GetOpenedSockCount());
                    }
                    catch { }
                    ThreadObj.Sleep(100);
                }
            });

            if (true)
            {
                NetTcpListener listener = LocalNet.CreateListener(new TcpListenParam(
                                                                      async(listener2, sock) =>
                {
                    while (true)
                    {
                        var stream     = sock.GetStream();
                        StreamReader r = new StreamReader(stream);

                        while (true)
                        {
                            string?line = await r.ReadLineAsync();

                            if (line._IsEmpty())
                            {
                                break;
                            }
                        }
                        int segmentSize = 400;
                        int numSegments = 1000;
                        int totalSize   = segmentSize * numSegments;

                        string ret =
                            $@"HTTP/1.1 200 OK
Content-Length: {totalSize}

";

                        await stream.WriteAsync(ret._GetBytes_Ascii());

                        byte[] buf = Util.Rand(numSegments);
                        for (int i = 0; i < numSegments; i++)
                        {
                            await stream.WriteAsync(buf);
                        }
                    }
                },
                                                                      null,
                                                                      port));

                listener.HideAcceptProcError = true;

                ThreadObj.Sleep(-1);
            }
        }