diff --git a/Docs/1.2.使用准则.ipynb b/Docs/1.2.使用准则.ipynb index 19b9645..afb5785 100644 --- a/Docs/1.2.使用准则.ipynb +++ b/Docs/1.2.使用准则.ipynb @@ -21,7 +21,41 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## 准备工作:先执行下面单元,以启动WebApi及设置全局对象、方法及其它" + "## 0、准备工作:先执行下面单元,以启动WebApi及设置全局对象、方法及其它" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 启动WebApi" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "dotnet_interactive": { + "language": "pwsh" + }, + "polyglot_notebook": { + "kernelName": "pwsh" + }, + "vscode": { + "languageId": "polyglot-notebook" + } + }, + "outputs": [], + "source": [ + "#启动已发布的WebApi项目\n", + "Start-Process -FilePath \"dotnet.exe\" -ArgumentList \"Publish/HttpClientStudy.WebApi/HttpClientStudy.WebApi.dll\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 关闭WebApi" ] }, { @@ -29,10 +63,10 @@ "execution_count": null, "metadata": { "dotnet_interactive": { - "language": "csharp" + "language": "pwsh" }, "polyglot_notebook": { - "kernelName": "csharp" + "kernelName": "pwsh" }, "vscode": { "languageId": "polyglot-notebook" @@ -40,20 +74,17 @@ }, "outputs": [], "source": [ - "//Nuget包\n", - "\n", - "//全局引用\n", - "#r \"./Publish/HttpClientStudy.Core/HttpClientStudy.Core.dll\"\n", - "\n", - "//全局对象\n", - "global using System.IO;\n", - "global using HttpClientStudy.Core;\n", - "global using HttpClientStudy.Core.Utilities;\n", - "\n", - "string dllFile = Path.GetFullPath(\"Publish\\\\HttpClientStudy.WebApp\\\\HttpClientStudy.WebApp.dll\",Directory.GetCurrentDirectory());\n", - "Console.WriteLine($\"指定的文件为:{dllFile}\");\n", - "//启动WebAPI项目\n", - "StartupUtility.StartWebApiDll(dllFile);" + "# 关闭项目进程\n", + "$WebAppProcName =\"HttpClientStudy.WebApp\";\n", + "$WebAppProc = Get-Process $WebAppProcName -ErrorAction Ignore\n", + "if($null -eq $WebAppProc)\n", + "{\n", + " Write-Host \"进程没有找到,可能已经\"\n", + "}\n", + "else {\n", + " $WebAppProc.Kill();\n", + " Write-Host \"$WebAppProcName 进程已退出\"\n", + "}" ] }, { @@ -404,6 +435,56 @@ "### 测试最大连接数" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "polyglot-notebook" + } + }, + "outputs": [], + "source": [ + "\n", + "using System.Net;\n", + "var ips = await Dns.GetHostAddressesAsync(\"www.google.com\");\n", + "\t\n", + "foreach (var ipAddress in ips)\n", + "{\n", + "\t Console.WriteLine(ipAddress.MapToIPv4().ToString());\n", + "}\n", + "\n", + "var socketsHandler = new SocketsHttpHandler\n", + "{\n", + "\tPooledConnectionLifetime = TimeSpan.FromSeconds(60),\n", + "\tPooledConnectionIdleTimeout = TimeSpan.FromMinutes(20),\n", + "\tMaxConnectionsPerServer = 2\n", + "};\n", + "\n", + "var client = new HttpClient(socketsHandler);\n", + "\n", + "var sw = Stopwatch.StartNew();\n", + "\n", + "var tasks = Enumerable.Range(0, 200).Select(i => client.GetAsync(\"https://www.google.com\"));\n", + "\n", + "await Task.WhenAll(tasks);\n", + "\n", + "sw.Stop();\n", + "\t\n", + "Console.WriteLine($\"{sw.ElapsedMilliseconds}ms taken for 200 requests\");\n", + "\t\n", + "//执行查看网络状态方法" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "该代码将MaxConnectionsPerServer限制为2。然后启动200个任务,每个任务都向同一端点发出HTTP请求。这些任务将同时运行。所有请求竞争所花费的时间将写入控制台。\n", + "如果使用netstat查看连接,则根据定义的限制,我们可以看到两个已建立的连接。\n", + "已建立\n" + ] + }, { "cell_type": "markdown", "metadata": {}, diff --git a/Docs/学习.ps1 b/Docs/学习.ps1 index 355ae45..a60976d 100644 --- a/Docs/学习.ps1 +++ b/Docs/学习.ps1 @@ -1,3 +1,7 @@ +Start-Process -FilePath "pwsh" -ArgumentList "-h" + +Pause + # 关闭项目进程 $WebAppProcName ="HttpClientStudy.WebApp"; $WebAppProc = Get-Process $WebAppProcName -ErrorAction Ignore diff --git a/HttpClientStudy.WebApp/appsettings.json b/HttpClientStudy.WebApp/appsettings.json index 10f68b8..3061efe 100644 --- a/HttpClientStudy.WebApp/appsettings.json +++ b/HttpClientStudy.WebApp/appsettings.json @@ -1,4 +1,5 @@ { + "urls": "http://localhost:5189", "Logging": { "LogLevel": { "Default": "Information",