欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2017年12月15日 13:43:58   作者:天馬3798  
WebSocket 是一種在單個(gè) TCP 連接上進(jìn)行全雙工通訊的協(xié)議,是建立在TCP上、且獨(dú)立的協(xié)議。下面這篇文章主要給大家介紹了關(guān)于Asp.Net Core中WebSocket綁定的方法,需要的朋友可以參考借鑒,下面來一起看看吧。

說明

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

Asp.Net Core2.0默認(rèn)已經(jīng)支持WebSocket,不需要另外安裝Nuget包。

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

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

一、示例1,

1.后臺(tái)啟動(dòng)文件Startup的configure中綁定WebSocket的路由監(jiān)聽

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.定義請求處理類

using System.Net.WebSockets; 
using System.Threading; 
using System.Threading.Tasks; 
namespace Core_Razor_2 
{ 
 public class WSHanleTwo 
 { 
  private WebSocket socket = null; 
  //創(chuàng)建鏈接 
  public async Task Connect(HttpContext context, Func<Task> n) 
  { 
   try 
   { 
    //執(zhí)行接收 
    WebSocket socket = await context.WebSockets.AcceptWebSocketAsync(); 
    this.socket = socket; 
    //執(zhí)行監(jiān)聽 
    await EchoLoop(); 
   } 
   catch (Exception ex) 
   { 
    throw ex; 
   } 
  } 
  /// <summary> 
  /// 響應(yīng)處理 
  /// </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("服務(wù)端相應(yīng)內(nèi)容"); 
    var outgoing = new ArraySegment<byte>(backInfo, 0, incoming.Count); 
    await this.socket.SendAsync(outgoing, WebSocketMessageType.Text, true, CancellationToken.None); 
   } 
  } 
 } 
} 

3.前臺(tái)請求代碼

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; 

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

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); 
 } 
} 

路由綁定:

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

Asp.Net Core上傳控件:http://xiazai.jb51.net/201712/yuanma/Uploader(jb51.net).rar

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • .NET?8?部署到?Docker的詳細(xì)過程

    .NET?8?部署到?Docker的詳細(xì)過程

    這篇文章主要介紹了?.NET?8?部署到?Docker,本文僅針對操作系統(tǒng)為 CentOS 8 的環(huán)境下部署方法進(jìn)行講述,需要的朋友可以參考下
    2024-04-04
  • JWT+Log4net配置與使用詳解

    JWT+Log4net配置與使用詳解

    這篇文章主要介紹了JWT+Log4net配置與使用詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-07-07
  • 淺談ASP.NET中MVC 4 的JS/CSS打包壓縮功能

    淺談ASP.NET中MVC 4 的JS/CSS打包壓縮功能

    打包(Bundling)及壓縮(Minification)指的是將多個(gè)js文件或css文件打包成單一文件并壓縮的做法,如此可減少瀏覽器需下載多個(gè)文件案才能完成網(wǎng)頁顯示的延遲感等,能有效縮小文件案體積,提高傳輸效率,提供使用者更流暢的瀏覽體驗(yàn)。
    2015-06-06
  • ASP.NET 定制簡單的錯(cuò)誤處理頁面實(shí)現(xiàn)代碼

    ASP.NET 定制簡單的錯(cuò)誤處理頁面實(shí)現(xiàn)代碼

    通常web應(yīng)用程序在發(fā)布后,為了給用戶一個(gè)友好界面和使用體驗(yàn),都會(huì)在錯(cuò)誤發(fā)生時(shí)跳轉(zhuǎn)至一個(gè)自定義的錯(cuò)誤頁面,而不是asp.net向用戶暴露出來的詳細(xì)的異常列表。
    2010-01-01
  • .NET擴(kuò)展方法使用實(shí)例詳解

    .NET擴(kuò)展方法使用實(shí)例詳解

    本文詳細(xì)講解了.NET的擴(kuò)展方法的使用,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-08-08
  • ASP.NET 多附件上傳實(shí)現(xiàn)代碼

    ASP.NET 多附件上傳實(shí)現(xiàn)代碼

    在寫這篇文章之前我也在Google上找到了很多有關(guān)多附件上傳的文章,有用ASP.NET實(shí)現(xiàn)的,也有用JSP、PHP等其它技術(shù)實(shí)現(xiàn)的
    2009-06-06
  • ASP.NET MVC中URL地址傳參的兩種寫法

    ASP.NET MVC中URL地址傳參的兩種寫法

    這篇文章主要介紹了ASP.NET MVC中URL地址傳參的兩種寫法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-09-09
  • ASP.NET動(dòng)態(tài)增加HTML元素的方法實(shí)例小結(jié)

    ASP.NET動(dòng)態(tài)增加HTML元素的方法實(shí)例小結(jié)

    這篇文章主要介紹了ASP.NET動(dòng)態(tài)增加HTML元素的方法,結(jié)合實(shí)例形式總結(jié)分析了asp.net針對樣式、Meta、js等元素動(dòng)態(tài)增加相關(guān)操作技巧,需要的朋友可以參考下
    2017-01-01
  • DataTable轉(zhuǎn)成字符串復(fù)制到txt文本的小例子

    DataTable轉(zhuǎn)成字符串復(fù)制到txt文本的小例子

    DataTable轉(zhuǎn)成字符串復(fù)制到txt文本的小例子,需要的朋友可以參考一下
    2013-03-03
  • Asp.net中的mail的發(fā)送

    Asp.net中的mail的發(fā)送

    Asp.net中的mail的發(fā)送...
    2006-09-09

最新評(píng)論