Asp.Net Core WebSocket绑定
2017-08-19 11:44
260 查看
1.说明
Asp.Net Core中WebScoket的操作使用基本上和Asp.net中相同,不同的是,绑定监听。
Asp.Net Core2.0默认已经支持WebSocket,不需要另外安装Nuget包。
通过对HttpContext中的WebSockets.AcceptWebSocketAsync方法,接受WebSocket请求;并返回WebScoket对象。
一、示例1,
1.后台启动文件Startup的configure中绑定WebSocket的路由监听
2.定义请求处理类
3.前台请求代码
二、为了简单绑定,可以这样封装
路由绑定:
Asp.Net Core上传控件:http://www.gongjuji.net/uploader/
更多:
SingalR自托管(self-host)实例2-实现Wpf客户端和Web客户端矩形同步
SingalR自托管(self-host)实例
HTML5 WebSocketAPI实例(二)
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, 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); } }
路由绑定:
//绑定websocket app.Map("/ws", SocketHandler.Map);
Asp.Net Core上传控件:http://www.gongjuji.net/uploader/
更多:
SingalR自托管(self-host)实例2-实现Wpf客户端和Web客户端矩形同步
SingalR自托管(self-host)实例
HTML5 WebSocketAPI实例(二)
相关文章推荐
- Asp.net core中的websocket
- asp.net core 绑定CheckBoxList
- asp.net core生成路由连接,请求参数如何获取和模型绑定
- ASP.NET Core的配置(3): 将配置绑定为对象
- asp.net core mvc中如何把二级域名绑定到特定的控制器上
- ASP.NET Core MVC四种枚举绑定方式
- ASP.NET Core 中文文档 第四章 MVC(2.1)模型绑定
- ASP.NET Core 2 学习笔记(九)模型绑定
- ASP.NET Core MVC四种枚举绑定方式
- ASP.NET Core MVC/WebAPi 模型绑定探索
- ASP.NET Core的配置(3): 将配置绑定为对象[下篇]
- 快速搭建CentOS+ASP.NET Core环境支持WebSocket
- 详解ASP.NET Core MVC四种枚举绑定方式
- WebSocket In ASP.NET Core(二)
- Asp.net Core MVC中怎么把二级域名绑定到特定的控制器上
- Asp.net Core中如何使用中间件来管理websocket
- ASP.NET Core MVC四种枚举绑定方式
- ASP.NET Core MVC四种枚举绑定方式
- Asp.Net Core发布绑定域名和端口