[英]How to make websocket server in ASP.NET Core RC2?
我使用“ Microsoft.AspNetCore.WebSockets.Server”:“ 0.1.0-rc2-final”制作了一個websocket服務器,但是不起作用。 (在rc1中,它是1.0.0-rc1-final,它可以正常工作...)
這是我的代碼:
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會話的方式:
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”引發異常“請求已中止”。
我確定客戶端不會關閉會話。
如何解決?
您需要await
以下行: WebsocketManager.Handle(webSocket, handler);
否則,請求結束並且資源被處置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.