Asp.netcore中的websocket

Websocket是html5后的产物,对于asp.net core中也得到了支持,首先在NuGet中添加Microsoft.AspNetCore.WebSockets的引用(现在是1.0.1版本,2017年3月7日发布的)。

创新互联公司2013年开创至今,先为凤县等服务建站,凤县等地企业,进行企业商务咨询服务。为凤县企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

首先在Configure中添加中间件

//添加websocket中间件
app.UseWebSockets();

接下来就要定义自己处理websocket的中间件了,代码如下:

using Microsoft.AspNetCore.Http;
using System;
using System.Net.WebSockets;
using System.Threading;
using System.Threading.Tasks;
 
namespace Asp.NetCore_WebPage.Middleware
{
    /// 
    /// websocket中间件,客户端发送的信息显示在控件台上,客户端会定时收到服务端推送的时间
    /// 
    public class WebSocketNotifyMiddleware
    {
        /// 
        /// 管道代理对象
        /// 
        private readonly RequestDelegate _next;
        /// 
        /// 
        /// 
        /// 
        public WebSocketNotifyMiddleware(RequestDelegate next)
        {
            _next = next;
        }
        /// 
        /// 中间件调用
        /// 
        /// 
        /// 
        public Task Invoke(HttpContext context)
        {
            //判断是否为websocket请求
            if (context.WebSockets.IsWebSocketRequest)
            {
                //接收客户端
                var webSocket = context.WebSockets.AcceptWebSocketAsync().Result;
                //启用一个线程处理接收客户端数据
                new Thread(Accept).Start(webSocket);
                while (webSocket.State == WebSocketState.Open)
                {
                    webSocket.SendAsync(new ArraySegment(System.Text.Encoding.UTF8.GetBytes($"{DateTime.Now}")), System.Net.WebSockets.WebSocketMessageType.Text, true, CancellationToken.None);
                    Thread.Sleep(1000);
                }
            }
            return this._next(context);
 
        }
        /// 
        /// 接收客户端数据方法,这里可以根据自己的需求切换功能代码
        /// 
        /// 
        void Accept(object obj)
        {
            var webSocket = obj as WebSocket;
            while (true)
            {
                var acceptArr = new byte[1024];
 
                var result = webSocket.ReceiveAsync(new ArraySegment(acceptArr), CancellationToken.None).Result;
 
                var acceptStr = System.Text.Encoding.UTF8.GetString(acceptArr).Trim(char.MinValue);
                Console.WriteLine("收到信息:" + acceptStr);
            }
 
        }
    }
}

添加中间件扩展

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.WebSockets;
using System.Threading;
using System.Threading.Tasks;
 
namespace Asp.NetCore_WebPage.Middleware
{
    /// 
    /// websocket通知中间件扩展
    /// 
    public static class WebSocketNotifyMiddlewareExtensions
    {
        /// 
        /// 使用websocket通知
        /// 
        /// 
        /// 
        public static IApplicationBuilder UseWebSocketNotify(
          this IApplicationBuilder builder)
        {
            return builder.UseMiddleware();
        }
    }
}

这样,就可以在Startup.cs中的Configure中添加自己创建的中间件了,代码如下:

//添加websocket中间件
 app.UseWebSockets();
 app.UseWebSocketNotify();

到此服务端创建完成,接下来看客户端:

    当前在数据:
    
              
@section scripts{ }

这里只是一个基本的例子,可以根据自己的业务来实现不同的功能。


名称栏目:Asp.netcore中的websocket
本文地址:http://ybzwz.com/article/joejjp.html

其他资讯