Use the WebSocket factory method instead of WebSocketProtocol (#6646)
- WebSocketProtocol.CreateFromStream makes the netstandard ManagedWebSocket which uses the inefficient versions of Stream overloads. - Updated the samples to use the new Memory<byte> overloads
This commit is contained in:
parent
b27739ad3f
commit
c528892560
|
|
@ -51,9 +51,9 @@ namespace EchoApp
|
||||||
private async Task Echo(HttpContext context, WebSocket webSocket, ILogger logger)
|
private async Task Echo(HttpContext context, WebSocket webSocket, ILogger logger)
|
||||||
{
|
{
|
||||||
var buffer = new byte[1024 * 4];
|
var buffer = new byte[1024 * 4];
|
||||||
var result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
|
var result = await webSocket.ReceiveAsync(buffer.AsMemory(), CancellationToken.None);
|
||||||
LogFrame(logger, result, buffer);
|
LogFrame(logger, webSocket, result, buffer);
|
||||||
while (!result.CloseStatus.HasValue)
|
while (result.MessageType != WebSocketMessageType.Close)
|
||||||
{
|
{
|
||||||
// If the client send "ServerClose", then they want a server-originated close to occur
|
// If the client send "ServerClose", then they want a server-originated close to occur
|
||||||
string content = "<<binary>>";
|
string content = "<<binary>>";
|
||||||
|
|
@ -75,19 +75,19 @@ namespace EchoApp
|
||||||
await webSocket.SendAsync(new ArraySegment<byte>(buffer, 0, result.Count), result.MessageType, result.EndOfMessage, CancellationToken.None);
|
await webSocket.SendAsync(new ArraySegment<byte>(buffer, 0, result.Count), result.MessageType, result.EndOfMessage, CancellationToken.None);
|
||||||
logger.LogDebug($"Sent Frame {result.MessageType}: Len={result.Count}, Fin={result.EndOfMessage}: {content}");
|
logger.LogDebug($"Sent Frame {result.MessageType}: Len={result.Count}, Fin={result.EndOfMessage}: {content}");
|
||||||
|
|
||||||
result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
|
result = await webSocket.ReceiveAsync(buffer.AsMemory(), CancellationToken.None);
|
||||||
LogFrame(logger, result, buffer);
|
LogFrame(logger, webSocket, result, buffer);
|
||||||
}
|
}
|
||||||
await webSocket.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None);
|
await webSocket.CloseAsync(webSocket.CloseStatus.Value, webSocket.CloseStatusDescription, CancellationToken.None);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void LogFrame(ILogger logger, WebSocketReceiveResult frame, byte[] buffer)
|
private void LogFrame(ILogger logger, WebSocket webSocket, ValueWebSocketReceiveResult frame, byte[] buffer)
|
||||||
{
|
{
|
||||||
var close = frame.CloseStatus != null;
|
var close = frame.MessageType == WebSocketMessageType.Close;
|
||||||
string message;
|
string message;
|
||||||
if (close)
|
if (close)
|
||||||
{
|
{
|
||||||
message = $"Close: {frame.CloseStatus.Value} {frame.CloseStatusDescription}";
|
message = $"Close: {webSocket.CloseStatus.Value} {webSocket.CloseStatusDescription}";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,6 @@
|
||||||
<Reference Include="Microsoft.AspNetCore.Http.Extensions" />
|
<Reference Include="Microsoft.AspNetCore.Http.Extensions" />
|
||||||
<Reference Include="Microsoft.Extensions.Logging.Abstractions" />
|
<Reference Include="Microsoft.Extensions.Logging.Abstractions" />
|
||||||
<Reference Include="Microsoft.Extensions.Options" />
|
<Reference Include="Microsoft.Extensions.Options" />
|
||||||
<Reference Include="System.Net.WebSockets.WebSocketProtocol" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|
|
||||||
|
|
@ -159,7 +159,7 @@ namespace Microsoft.AspNetCore.WebSockets
|
||||||
|
|
||||||
Stream opaqueTransport = await _upgradeFeature.UpgradeAsync(); // Sets status code to 101
|
Stream opaqueTransport = await _upgradeFeature.UpgradeAsync(); // Sets status code to 101
|
||||||
|
|
||||||
return WebSocketProtocol.CreateFromStream(opaqueTransport, isServer: true, subProtocol: subProtocol, keepAliveInterval: keepAliveInterval);
|
return WebSocket.CreateFromStream(opaqueTransport, isServer: true, subProtocol: subProtocol, keepAliveInterval: keepAliveInterval);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -28,8 +28,8 @@ namespace Microsoft.AspNetCore.WebSockets.Test
|
||||||
return new WebSocketPair(
|
return new WebSocketPair(
|
||||||
serverStream,
|
serverStream,
|
||||||
clientStream,
|
clientStream,
|
||||||
clientSocket: WebSocketProtocol.CreateFromStream(clientStream, isServer: false, subProtocol: null, keepAliveInterval: TimeSpan.FromMinutes(2)),
|
clientSocket: WebSocket.CreateFromStream(clientStream, isServer: false, subProtocol: null, keepAliveInterval: TimeSpan.FromMinutes(2)),
|
||||||
serverSocket: WebSocketProtocol.CreateFromStream(serverStream, isServer: true, subProtocol: null, keepAliveInterval: TimeSpan.FromMinutes(2)));
|
serverSocket: WebSocket.CreateFromStream(serverStream, isServer: true, subProtocol: null, keepAliveInterval: TimeSpan.FromMinutes(2)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue