真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

ASP.NETCore中WebSocket的作用是什么

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)ASP.NET Core 中WebSocket的作用是什么,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

上海ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書(shū)未來(lái)市場(chǎng)廣闊!成為成都創(chuàng)新互聯(lián)的ssl證書(shū)銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書(shū)合作)期待與您的合作!

首先創(chuàng)建一個(gè) ASP.NET 5 WebAPI 項(xiàng)目。

dotnet new webapi -n WebSocketsTutorialdotnet new slndotnet sln add WebSocketsTutorial
  

現(xiàn)在添加SignalR到項(xiàng)目中。

dotnet add WebSocketsTutorial/ package Microsoft.AspNet.SignalR
      

示例代碼

我們首先將WebSockets中間件添加到我們的WebAPI應(yīng)用程序中。打開(kāi)Startup.cs,向Configure方法添加下面的代碼。

在本教程中,我喜歡保持簡(jiǎn)單。因此,我不打算討論SignalR。它將完全基于WebSocket通信。你也可以用原始的WebSockets實(shí)現(xiàn)同樣的功能,如果你想讓事情變得更簡(jiǎn)單,你不需要使用SignalR。

app.UseWebSockets();
   
   

接下來(lái),我們將刪除默認(rèn)的WeatherForecastController,并添加一個(gè)名為WebSocketsController的新控制器。注意,我們將只是使用一個(gè)控制器action,而不是攔截請(qǐng)求管道。

這個(gè)控制器的完整代碼如下所示。

using System;using System.Net.WebSockets;using System.Text;using System.Threading;using System.Threading.Tasks;using Microsoft.AspNetCore.Mvc;using Microsoft.Extensions.Logging;namespace WebSocketsTutorial.Controllers{    [ApiController]    [Route("[controller]")]    public class WebSocketsController : ControllerBase    {        private readonly ILogger _logger;
       public WebSocketsController(ILogger logger)        {            _logger = logger;        }
       [HttpGet("/ws")]        public async Task Get()        {          if (HttpContext.WebSockets.IsWebSocketRequest)          {              using var webSocket = await HttpContext.WebSockets.AcceptWebSocketAsync();              _logger.Log(LogLevel.Information, "WebSocket connection established");              await Echo(webSocket);          }          else          {              HttpContext.Response.StatusCode = 400;          }        }                private async Task Echo(WebSocket webSocket)        {            var buffer = new byte[1024 * 4];            var result = await webSocket.ReceiveAsync(new ArraySegment(buffer), CancellationToken.None);            _logger.Log(LogLevel.Information, "Message received from Client");
           while (!result.CloseStatus.HasValue)            {                var serverMsg = Encoding.UTF8.GetBytes($"Server: Hello. You said: {Encoding.UTF8.GetString(buffer)}");                await webSocket.SendAsync(new ArraySegment(serverMsg, 0, serverMsg.Length), result.MessageType, result.EndOfMessage, CancellationToken.None);                _logger.Log(LogLevel.Information, "Message sent to Client");
               result = await webSocket.ReceiveAsync(new ArraySegment(buffer), CancellationToken.None);                _logger.Log(LogLevel.Information, "Message received from Client");                            }            await webSocket.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None);            _logger.Log(LogLevel.Information, "WebSocket connection closed");        }    }}

這是我們所做的。

1、添加一個(gè)名為ws/的新路由。

2、檢查當(dāng)前請(qǐng)求是否通過(guò)WebSockets,否則拋出400。

3、等待,直到客戶端發(fā)起請(qǐng)求。

4、進(jìn)入一個(gè)循環(huán),直到客戶端關(guān)閉連接。

5、在循環(huán)中,我們將發(fā)送“Server: Hello. You said: ”信息,并把它發(fā)回給客戶端。

6、等待,直到客戶端發(fā)送另一個(gè)請(qǐng)求。

注意,在初始握手之后,服務(wù)器不需要等待客戶端發(fā)送請(qǐng)求來(lái)將消息推送到客戶端。讓我們運(yùn)行應(yīng)用程序,看看它是否工作。

dotnet run --project WebSocketsTutorial
   

運(yùn)行應(yīng)用程序后,請(qǐng)?jiān)L問(wèn)https://localhost:5001/swagger/index.html,應(yīng)該看到Swagger UI。

ASP.NET Core 中WebSocket的作用是什么

現(xiàn)在我們將看到如何讓客戶端和服務(wù)器彼此通信。在這個(gè)演示中,我將使用Chrome的DevTools(打開(kāi)新標(biāo)簽→檢查或按F12→控制臺(tái)標(biāo)簽)。但是,你可以選擇任何客戶端。

首先,我們將創(chuàng)建一個(gè)到服務(wù)器終結(jié)點(diǎn)的WebSocket連接。

let webSocket = new WebSocket('wss://localhost:5001/ws');
   

它所做的是,在客戶端和服務(wù)器之間發(fā)起一個(gè)連接。wss://是WebSockets安全協(xié)議,因?yàn)槲覀兊腤ebAPI應(yīng)用程序是通過(guò)TLS服務(wù)的。

然后,可以通過(guò)調(diào)用webSocket.send()方法發(fā)送消息。你的控制臺(tái)應(yīng)該類似于下面的控制臺(tái)。

ASP.NET Core 中WebSocket的作用是什么

讓我們仔細(xì)看看WebSocket連接

如果轉(zhuǎn)到Network選項(xiàng)卡,則通過(guò)WS選項(xiàng)卡過(guò)濾掉請(qǐng)求,并單擊最后一個(gè)稱為WS的請(qǐng)求。

單擊Messages選項(xiàng)卡并檢查來(lái)回傳遞的消息。在此期間,如果調(diào)用以下命令,將能夠看到“This was sent from the Client!”。試試吧!

webSocket.send("Client: Hello");
   

ASP.NET Core 中WebSocket的作用是什么

如你所見(jiàn),服務(wù)器確實(shí)需要等待客戶端發(fā)送響應(yīng)(即在初始握手之后),并且客戶端可以發(fā)送消息而不會(huì)被阻塞。這是全雙工通信。我們已經(jīng)討論了WebSocket通信的數(shù)據(jù)傳輸方面。作為練習(xí),你可以運(yùn)行一個(gè)循環(huán)將消息推送到客戶機(jī),以查看它的運(yùn)行情況。

除此之外,服務(wù)器和客戶端還可以通過(guò)ping-pong來(lái)查看客戶端是否還活著。這是WebSockets中的一個(gè)實(shí)際特性!如果你真的想看看這些數(shù)據(jù)包,你可以使用像WireShark這樣的工具來(lái)了解。

它是如何握手的?好吧,如果你跳轉(zhuǎn)到Headers選項(xiàng)卡,你將能夠看到我們?cè)谶@篇文章的第一部分談到的請(qǐng)求-響應(yīng)標(biāo)題。

ASP.NET Core 中WebSocket的作用是什么

上述就是小編為大家分享的ASP.NET Core 中WebSocket的作用是什么了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


網(wǎng)站欄目:ASP.NETCore中WebSocket的作用是什么
文章URL:http://weahome.cn/article/gdpsoj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部