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的路由监听 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; //创建链接 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,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,incoming.Count); await this.socket.SendAsync(outgoing,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 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对编程小技巧的支持。 (编辑:甘南站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- MVC .Net Cascade在使用EF Code First Approach时删除
- asp.net – 测试Oracle存储过程的最简单的方法
- asp.net jquery+ajax异步刷新实现示例
- asp.net中使用repeater和PageDataSource搭配实现分页代码
- asp.net – 如何使用Fiddler编辑HTTP请求
- asp.net – jquery getJson没有将任何值传递给控制器
- asp.net – 动态创建和共享Google云端硬盘文件夹
- asp.net-mvc – 在一个页面中以两种不同的形式使用多个@ Ht
- asp.net-mvc-4 – 在EF迁移配置类的Seed方法中获取App_Data
- asp.net – 在渲染到位图之前缩放WPF内容
- 转换if和foreach语句以选择linq中的where
- 使用ASP.NET Identity 2.0和MVC 5进行自定义单点
- asp.net-mvc-4 – .net 4.5 ASP.Net web API JSO
- asp.net – Ajax上的Identity Server 3 – 401而
- asp.net-core – .net核心自定义身份验证中的Use
- asp.net-mvc – ASP.NET MVC如何在生产中禁用调试
- asp.net – 如果我没有指定targetFramework =“4
- .net – IIS 6.0和ASPX中的404自定义错误不起作用
- .net – CS0012:类型’System.Data.Linq.DataCo
- ASP.NET学习CORE中使用Cookie身份认证方法