最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2017年12月15日 13:43:58   作者:天馬3798  
WebSocket 是一種在單個 TCP 連接上進(jìn)行全雙工通訊的協(xié)議,是建立在TCP上、且獨立的協(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.后臺啟動文件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.前臺請求代碼

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í)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • asp.net微信開發(fā)(開發(fā)者接入)

    asp.net微信開發(fā)(開發(fā)者接入)

    這篇文章主要介紹了asp.net微信開發(fā)中有關(guān)開發(fā)者接入的相關(guān)內(nèi)容,需要的朋友可以參考下
    2015-11-11
  • ASP.NET?Core配置設(shè)置之Configuration包

    ASP.NET?Core配置設(shè)置之Configuration包

    這篇文章介紹了ASP.NET?Core配置設(shè)置之Configuration包,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • ASP.NET?Core中的Caching組件簡介

    ASP.NET?Core中的Caching組件簡介

    這篇文章介紹了ASP.NET?Core中的Caching組件,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • MVC+EasyUI+三層新聞網(wǎng)站建立 實現(xiàn)登錄功能(四)

    MVC+EasyUI+三層新聞網(wǎng)站建立 實現(xiàn)登錄功能(四)

    這篇文章主要為大家詳細(xì)介紹了MVC+EasyUI+三層新聞網(wǎng)站建立的第四篇,教大家實現(xiàn)登錄功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • 在Asp.net core中實現(xiàn)websocket通信

    在Asp.net core中實現(xiàn)websocket通信

    這篇文章介紹了在Asp.net core中實現(xiàn)websocket通信的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • .net使用jwt進(jìn)行身份認(rèn)證的流程記錄

    .net使用jwt進(jìn)行身份認(rèn)證的流程記錄

    這篇文章主要給大家介紹了關(guān)于.net使用jwt進(jìn)行身份認(rèn)證的相關(guān)資料,JWT是Auth0提出的通過對JSON進(jìn)行加密簽名來實現(xiàn)授權(quán)驗證的方案,本文通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-09-09
  • Visual Studio 2017 RC 初探安裝教程

    Visual Studio 2017 RC 初探安裝教程

    這篇文章主要為大家詳細(xì)介紹了Visual Studio 2017 RC初探安裝教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • asp.net中Timer無刷新定時器的實現(xiàn)方法

    asp.net中Timer無刷新定時器的實現(xiàn)方法

    這篇文章主要介紹了asp.net中Timer無刷新定時器的實現(xiàn)方法,是一個非常具有實用價值的技巧,需要用到Ajax技術(shù),需要的朋友可以參考下
    2014-08-08
  • Repeater控件實現(xiàn)編輯、更新、刪除等操作示例代碼

    Repeater控件實現(xiàn)編輯、更新、刪除等操作示例代碼

    如何在Repeater控件中實現(xiàn)像GridView控件一樣的編輯、更新、刪除功能?下面有個不錯的示例,感興趣的朋友可以參考下,希望對大家有所幫助
    2014-01-01
  • 如何禁止文本框的記憶功能方法集錦

    如何禁止文本框的記憶功能方法集錦

    IE提供了一個自動完成功能可以記憶我們的輸入內(nèi)容(如帳號等),方便下一次快速地錄入類似資料.這確實是一個非常友好的功能, 在操作時只需用鼠標(biāo)雙擊文本框或輸入前幾個字符, 系統(tǒng)會自動列出以前的錄入歷史供你選擇, 大大提高錄入速度及準(zhǔn)確性.
    2014-06-06

最新評論

池州市| 汤阴县| 云和县| 临安市| 桦川县| 灌云县| 深水埗区| 关岭| 息烽县| 依安县| 广河县| 潢川县| 渭源县| 太湖县| 通道| 沁阳市| 富宁县| 汉沽区| 日照市| 昭通市| 吉隆县| 房产| 四子王旗| 泽州县| 义乌市| 随州市| 朝阳市| 五峰| 丹棱县| 甘南县| 元朗区| 阳西县| 兴文县| 新干县| 宣武区| 巴塘县| 晋城| 贡山| 封丘县| 花垣县| 灵武市|