main
wanggaofeng 11 months ago
parent a4aace285b
commit b1676d4ce8

@ -21,7 +21,41 @@
"cell_type": "markdown", "cell_type": "markdown",
"metadata": {}, "metadata": {},
"source": [ "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, "execution_count": null,
"metadata": { "metadata": {
"dotnet_interactive": { "dotnet_interactive": {
"language": "csharp" "language": "pwsh"
}, },
"polyglot_notebook": { "polyglot_notebook": {
"kernelName": "csharp" "kernelName": "pwsh"
}, },
"vscode": { "vscode": {
"languageId": "polyglot-notebook" "languageId": "polyglot-notebook"
@ -40,20 +74,17 @@
}, },
"outputs": [], "outputs": [],
"source": [ "source": [
"//Nuget包\n", "# 关闭项目进程\n",
"\n", "$WebAppProcName =\"HttpClientStudy.WebApp\";\n",
"//全局引用\n", "$WebAppProc = Get-Process $WebAppProcName -ErrorAction Ignore\n",
"#r \"./Publish/HttpClientStudy.Core/HttpClientStudy.Core.dll\"\n", "if($null -eq $WebAppProc)\n",
"\n", "{\n",
"//全局对象\n", " Write-Host \"进程没有找到,可能已经\"\n",
"global using System.IO;\n", "}\n",
"global using HttpClientStudy.Core;\n", "else {\n",
"global using HttpClientStudy.Core.Utilities;\n", " $WebAppProc.Kill();\n",
"\n", " Write-Host \"$WebAppProcName 进程已退出\"\n",
"string dllFile = Path.GetFullPath(\"Publish\\\\HttpClientStudy.WebApp\\\\HttpClientStudy.WebApp.dll\",Directory.GetCurrentDirectory());\n", "}"
"Console.WriteLine($\"指定的文件为:{dllFile}\");\n",
"//启动WebAPI项目\n",
"StartupUtility.StartWebApiDll(dllFile);"
] ]
}, },
{ {
@ -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", "cell_type": "markdown",
"metadata": {}, "metadata": {},

@ -1,3 +1,7 @@
Start-Process -FilePath "pwsh" -ArgumentList "-h"
Pause
# 关闭项目进程 # 关闭项目进程
$WebAppProcName ="HttpClientStudy.WebApp"; $WebAppProcName ="HttpClientStudy.WebApp";
$WebAppProc = Get-Process $WebAppProcName -ErrorAction Ignore $WebAppProc = Get-Process $WebAppProcName -ErrorAction Ignore

@ -1,4 +1,5 @@
{ {
"urls": "http://localhost:5189",
"Logging": { "Logging": {
"LogLevel": { "LogLevel": {
"Default": "Information", "Default": "Information",

Loading…
Cancel
Save