一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP.NET教程 - Asp.Net Core中WebSocket綁定的方法詳解

Asp.Net Core中WebSocket綁定的方法詳解

2020-05-21 14:22天馬3798 ASP.NET教程

WebSocket 是一種在單個 TCP 連接上進行全雙工通訊的協議,是建立在TCP上、且獨立的協議。下面這篇文章主要給大家介紹了關于Asp.Net Core中WebSocket綁定的方法,需要的朋友可以參考借鑒,下面來一起看看吧。

說明

Websocket是html5后的產物,對于asp.net core中也得到了支持,Asp.Net Core中WebScoket的操作使用基本上和Asp.net中相同,不同的是,綁定監聽。

Asp.Net Core2.0默認已經支持WebSocket,不需要另外安裝Nuget包。

通過對HttpContext中的WebSockets.AcceptWebSocketAsync方法,接受WebSocket請求;并返回WebScoket對象。

下面話不多說了,來一起看看詳細的介紹吧。

一、示例1,

1.后臺啟動文件Startup的configure中綁定WebSocket的路由監聽

?
1
2
3
4
5
6
7
8
9
10
11
public void Configure(IApplicationBuilder app, IHostingEnvironment env, IServiceProvider svp)
{
......
 //綁定WebSocket
 app.Map("/wsone/Connect", (con) =>
 {
  con.UseWebSockets();
  WSHanleTwo _two = new WSHanleTwo();
  con.Use(_two.Connect);
 });
}

2.定義請求處理類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
using System.Net.WebSockets;
using System.Threading;
using System.Threading.Tasks;
namespace Core_Razor_2
{
 public class WSHanleTwo
 {
  private WebSocket socket = null;
  //創建鏈接
  public async Task Connect(HttpContext context, Func<Task> n)
  {
   try
   {
    //執行接收
    WebSocket socket = await context.WebSockets.AcceptWebSocketAsync();
    this.socket = socket;
    //執行監聽
    await EchoLoop();
   }
   catch (Exception ex)
   {
    throw ex;
   }
  }
  /// <summary>
  /// 響應處理
  /// </summary>
  /// <returns></returns>
  async Task EchoLoop()
  {
   var buffer = new byte[1024];
   var seg = new ArraySegment<byte>(buffer);
   while (this.socket.State == WebSocketState.Open)
   {
    var incoming = await this.socket.ReceiveAsync(seg, CancellationToken.None);
    byte[] backInfo = System.Text.UTF8Encoding.Default.GetBytes("服務端相應內容");
    var outgoing = new ArraySegment<byte>(backInfo, 0, incoming.Count);
    await this.socket.SendAsync(outgoing, WebSocketMessageType.Text, true, CancellationToken.None);
   }
  }
 }
}

3.前臺請求代碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
var socket;
//var uri = "ws://" + window.location.host + "/ws";
var uri = "ws://" + window.location.host + "@Url.Action("Connect")";
var output;
var text = "test echo";
function write(s) {
 var p = document.createElement("p");
 p.innerHTML = s;
 output.appendChild(p);
}
function doConnect() {
 socket = new WebSocket(uri);
 socket.onopen = function (e) { write("opened " + uri); doSend(); };
 socket.onclose = function (e) { write("closed"); };
 socket.onmessage = function (e) { write("Received: " + e.data); socket.close(); };
 socket.onerror = function (e) { write("Error: " + e.data); };
}
function doSend() {
 write("Sending: " + text);
 socket.send(text);
}
function onInit() {
 output = document.getElementById("output");
 doConnect();
}
window.onload = onInit;

二、為了簡單綁定,可以這樣封裝

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
public class SocketHandler
{
 public const int BufferSize = 4096;
 WebSocket socket;
 SocketHandler(WebSocket socket)
 {
  this.socket = socket;
 }
 async Task EchoLoop()
 {
  var buffer = new byte[BufferSize];
  var seg = new ArraySegment<byte>(buffer);
  while (this.socket.State == WebSocketState.Open)
  {
   var incoming = await this.socket.ReceiveAsync(seg, CancellationToken.None);
   var outgoing = new ArraySegment<byte>(buffer, 0, incoming.Count);
   await this.socket.SendAsync(outgoing, WebSocketMessageType.Text, true, CancellationToken.None);
  }
 }
 static async Task Acceptor(HttpContext hc, Func<Task> n)
 {
  if (!hc.WebSockets.IsWebSocketRequest)
   return;
  var socket = await hc.WebSockets.AcceptWebSocketAsync();
  var h = new SocketHandler(socket);
  await h.EchoLoop();
 }
 /// <summary>
 /// 路由綁定處理
 /// </summary>
 /// <param name="app"></param>
 public static void Map(IApplicationBuilder app)
 {
  app.UseWebSockets();
  app.Use(SocketHandler.Acceptor);
 }
}

路由綁定:

?
1
2
3
[csharp] view plain copy
//綁定websocket
app.Map("/ws", SocketHandler.Map);

Asp.Net Core上傳控件:Uploader.rar

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

原文鏈接:http://blog.csdn.net/u011127019/article/details/77408072

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日本老妇成熟 | 99精品在线视频观看 | 好湿好紧好大野战 | 毛片亚洲毛片亚洲毛片 | 亚洲成A人片在线观看中文L | 国产一区二区在线观看美女 | 亚洲精品91大神在线观看 | 久久久久影视 | 国产乱码免费卡1卡二卡3卡四 | 8x8x华人免费 | 被黑人同学彻底征服全文小说阅读 | 韩国三级年轻小的胰子完整 | 日本韩国推理片免费观看网站 | 啊啊啊好大好爽视频 | 日产乱码卡一卡2卡三卡四福利 | 女子校生下媚药在线观看 | 国产免费视 | 亚洲欧美一区二区三区不卡 | 丝瓜茄子绿巨人秋葵榴莲污 | 国产精品原创视频 | 欧美激烈精交gif动态图18p | 禁漫H天堂免费A漫 | 日韩免费在线视频 | www91在线观看 | 91日本在线观看亚洲精品 | 99这里只有精品66视频 | yin娃sao货调教情趣用品店 | 欧美肥b | 久久久亚洲国产精品主播 | 果冻传媒天美传媒在线小视频播放 | 西野翔全部作品在线观看 | 沟厕okn系列在线播放 | 999久久久免费精品国产牛牛 | 男人久久天堂 | 草草影院永久在线观看 | 欧美又大又粗又爽视频 | 无颜之月5集全免费看无删除 | 我和寂寞孕妇的性事 | 四虎影院精品在线观看 | 禁忌第一季第3季 | 香蕉草莓视频 |