如何在ASP.NET Core RC2中制作Websocket服务器? [英] How to make websocket server in ASP.NET Core RC2?

查看:352
本文介绍了如何在ASP.NET Core RC2中制作Websocket服务器?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用 Microsoft.AspNetCore.WebSockets.Server: 0.1.0-rc2-final制作一个websocket服务器,但不起作用。
(在rc1中,它是1.0.0-rc1-final,它可以正常工作...)

I use "Microsoft.AspNetCore.WebSockets.Server": "0.1.0-rc2-final" to make a websocket server, but not work. (In rc1, it is 1.0.0-rc1-final, and it work fine...)

这是我的代码:

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        loggerFactory.AddConsole(Configuration.GetSection("Logging"));
        loggerFactory.AddDebug();

        app.UseWebSockets();

        app.Use(async (http, next) =>
        {

            if (http.WebSockets.IsWebSocketRequest)
            {
                IHandler handler = WebsocketManager.getHandler(http.Request.Path);
                if (handler == null)
                {
                    await next();
                }
                else
                {
                    var webSocket = await http.WebSockets.AcceptWebSocketAsync();
                    if (webSocket != null && webSocket.State == WebSocketState.Open)
                    {
                        // TODO: Handle the socket here.
                        WebsocketManager.Handle(webSocket, handler);
                    }
                }
            }
            else
            {
                // Nothing to do here, pass downstream.  
                await next();
            }
        });


        app.UseMvc();
    }

WebsocketManager是我自己的管理器类。
这是我处理websocket会话的方式:

WebsocketManager is my own manager class. And Here is how I handle websocket session:

    public async Task Listen()
    {
        OnOpen();
        while (_webSocket.State == WebSocketState.Open)
        {
            var error = String.Empty;

            try
            {
                var buffer = new ArraySegment<Byte>(new Byte[4096]);
                var received = await _webSocket.ReceiveAsync(buffer, CancellationToken.None);

                switch (received.MessageType)
                {
                    case WebSocketMessageType.Close:
                        OnClose(received.CloseStatus, received.CloseStatusDescription);
                        break;
                    case WebSocketMessageType.Text:
                        var data = Encoding.UTF8.GetString(buffer.Array, buffer.Offset, buffer.Count).Trim('\0');
                        OnMessage(data);
                        break;
                    case WebSocketMessageType.Binary:
                        OnMessage(buffer.Array);
                        break;
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
                break;
            }
        }
    }

然后是 _webSocket。 ReceiveAsync引发的异常请求已中止。

And then, "_webSocket.ReceiveAsync" thrown exception "The request was aborted."

我确定客户端没有关闭会话。

I am sure client not close the session.

推荐答案

您需要 await 这行:

WebsocketManager.Handle(webSocket,handler);

否则,请求将结束并且资源将被处置。

You need to await this line: WebsocketManager.Handle(webSocket, handler); Otherwise the request ends and the resources get disposed.

这篇关于如何在ASP.NET Core RC2中制作Websocket服务器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆