Asp.Net Core中WebSocket绑定的方法详解
更新时间:2017年12月15日 13:43:58 作者:天马3798
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的路由监听
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);
}
}
路由绑定:
[csharp] view plain copy
//绑定websocket
app.Map(“/ws”, SocketHandler.Map);
Asp.Net Core上传控件:xiazai.jb51.net/201712/yuanma/Uploader(jb51.net).rar
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对华域联盟的支持。
您可能感兴趣的文章:NetCore WebSocket即时通讯示例详解ASP.NET Core 中间件之压缩、缓存浅谈ASP.NET Core 中间件详解及项目实战详解在ASP.NET Core 中使用Cookie中间件Asp.Net Core 通过中间件防止图片盗链的实例浅谈ASP.NET Core中间件实现分布式 Session浅谈ASP.NET Core 2.0 中间件(译)ASP.NET Core中间件设置教程(7).Net Core Cors中间件的深入讲解Asp.net Core中如何使用中间件来管理websocket
asp.net
core
websocket
相关文章
MVC后台创建Json(List)前台接受并循环读取实例MVC后台创建Json(List)同时前台接受并循环读取,具体实现代码如下,感兴趣的朋友可以参考下哈,希望对大家有所帮助 2013-06-06
ASP.NET页面在IE缓存的清除办法ASP.NET页面在IE缓存的清除办法,需要的朋友可以参考一下 2013-03-03
ASP.net(c#) 生成html的几种解决方案[思路]下面的文章转载自网络,其代码很多都有问题,这里只提供给大家一个思路.
2009-05-05
ASP.NET MVC5 网站开发框架模型、数据存储、业务逻辑(三)上次搭建好了项目框架,但还是觉得不太对劲,后来才想起来没有对开发目标进行定位,这个小demo虽然不用做需求分析,但是要实现什么效果还得明确。后来想了一下就做个最简单的网站,目标定为小公司进行展示用的网站。功能有显示用的文章功能,咨询留言,评论等 2015-09-09
ASP.NET过滤HTML标签只保留换行与空格的方法这篇文章主要介绍了ASP.NET过滤HTML标签只保留换行与空格的方法,包含网上常见的方法以及对此方法的改进,具有一定的参考借鉴价值,需要的朋友可以参考下 2014-12-12
asp.net Application_AcquireRequestState事件,导致Ajax客户端不项目中使用Application_AcquireRequestState事件,来做一些用户信息的验证工作.
2010-03-03
.NET资源泄露与处理方案知识点分享在本篇文章里小编给大家整理的是关于.NET资源泄露与处理方案内容,有需要的朋友们可以参考下。 2019-11-11
Asp.net自定义控件之加载层这篇文章主要介绍了Asp.net自定义控件之加载层,点击按钮自动显示信息加载效果,具有一定的实用性,感兴趣的小伙伴们可以参考一下 2016-06-06
Springboot服务Docker化自动部署的实现方法这篇文章主要介绍了Springboot服务Docker化自动部署的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 2021-03-03
浅谈ASP.NET中多层架构Asp.net的多层架构主要是为了解决数据层,逻辑层,表示层等之间的关系。我的做法是这样的:首先建立一个DataCore的基类。基类里面封装了一些低层的数据库的基本操作,比如说数据库联接,调用存储过程等等。 2015-06-06
最新评论

评论(0)