• 在Asp.net core中使用WebScocket


    今天小试了一下在Asp.net core中使用websocket,这里记录一下:

    1. 在 Startup 类的 Configure 方法中添加 WebSocket 中间件。
     app.UseWebSockets();

    它也可以传入一些参数

    app.UseWebSockets(new WebSocketOptions()
    {
        KeepAliveInterval = TimeSpan.FromSeconds(120),
        ReceiveBufferSize = 4 * 1024
    });
    1. 添加WebSocket中间件的处理函数:
    async Task WebSocketMiddleware(HttpContext context, Func<Task> next)
    {
        //这里监听的是 /ws 作为地址
        if (context.Request.Path != "/ws")
        {
            await next();
            return;
        }
                                                                                            
        if (!context.WebSockets.IsWebSocketRequest)
        {
            context.Response.StatusCode = 400;
            return;
        }
    
        WebSocket webSocket = await context.WebSockets.AcceptWebSocketAsync();
        await Echo(context, webSocket);
    }

     

    1. 在Startup 类的 Configure函数中应用该中间件。 
       app.Use(WebSocketMiddleware);
    1. 最后再来完成我们的WebScoket功能函数Echo
    async Task Echo(HttpContext context, WebSocket webSocket)
    {
        var buffer = new byte[1024 * 4];
        WebSocketReceiveResult result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
        while (!result.CloseStatus.HasValue)
        {
            await webSocket.SendAsync(new ArraySegment<byte>(buffer, 0, result.Count), 
              result.MessageType, result.EndOfMessage, CancellationToken.None); result
    = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None); } await webSocket.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None); }

    到此一个简单的websocket应用就完成了,我们可以随便找一个测试webscoket的程序或在线网页测试一下了。

    最后需要说明一下的时,本身asp.net core的websocket是可以在win7下跑的(来自于Kestrel内核的支持),但win7下的iis是不支持websocket反向代理的,因此如果在win7下开发或测试的时候,不要用iis来反向代理asp.net core程序。

  • 相关阅读:
    java去除string类型里面的中括号
    java深拷贝浅拷贝
    前端接受数据去除[" "]的方法
    sql 查询近6 /xx个月/天 统计数据
    vue 定时器(定时任务)
    vue 二维码判断手机登录是哪个操作系统
    Connection is read-only. Queries leading to data modification are not allowed
    redis一闪而退解决办法
    前端的模糊查找
    vue笔记生命周期里面的某些函数
  • 原文地址:https://www.cnblogs.com/TianFang/p/8436790.html
Copyright © 2020-2023  润新知