Skip to content

Commit c528892

Browse files
authored
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
1 parent b27739a commit c528892

File tree

4 files changed

+12
-13
lines changed

4 files changed

+12
-13
lines changed

src/Middleware/WebSockets/samples/EchoApp/Startup.cs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,9 @@ public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerF
5151
private async Task Echo(HttpContext context, WebSocket webSocket, ILogger logger)
5252
{
5353
var buffer = new byte[1024 * 4];
54-
var result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
55-
LogFrame(logger, result, buffer);
56-
while (!result.CloseStatus.HasValue)
54+
var result = await webSocket.ReceiveAsync(buffer.AsMemory(), CancellationToken.None);
55+
LogFrame(logger, webSocket, result, buffer);
56+
while (result.MessageType != WebSocketMessageType.Close)
5757
{
5858
// If the client send "ServerClose", then they want a server-originated close to occur
5959
string content = "<<binary>>";
@@ -75,19 +75,19 @@ private async Task Echo(HttpContext context, WebSocket webSocket, ILogger logger
7575
await webSocket.SendAsync(new ArraySegment<byte>(buffer, 0, result.Count), result.MessageType, result.EndOfMessage, CancellationToken.None);
7676
logger.LogDebug($"Sent Frame {result.MessageType}: Len={result.Count}, Fin={result.EndOfMessage}: {content}");
7777

78-
result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
79-
LogFrame(logger, result, buffer);
78+
result = await webSocket.ReceiveAsync(buffer.AsMemory(), CancellationToken.None);
79+
LogFrame(logger, webSocket, result, buffer);
8080
}
81-
await webSocket.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None);
81+
await webSocket.CloseAsync(webSocket.CloseStatus.Value, webSocket.CloseStatusDescription, CancellationToken.None);
8282
}
8383

84-
private void LogFrame(ILogger logger, WebSocketReceiveResult frame, byte[] buffer)
84+
private void LogFrame(ILogger logger, WebSocket webSocket, ValueWebSocketReceiveResult frame, byte[] buffer)
8585
{
86-
var close = frame.CloseStatus != null;
86+
var close = frame.MessageType == WebSocketMessageType.Close;
8787
string message;
8888
if (close)
8989
{
90-
message = $"Close: {frame.CloseStatus.Value} {frame.CloseStatusDescription}";
90+
message = $"Close: {webSocket.CloseStatus.Value} {webSocket.CloseStatusDescription}";
9191
}
9292
else
9393
{

src/Middleware/WebSockets/src/Microsoft.AspNetCore.WebSockets.csproj

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
<Reference Include="Microsoft.AspNetCore.Http.Extensions" />
1414
<Reference Include="Microsoft.Extensions.Logging.Abstractions" />
1515
<Reference Include="Microsoft.Extensions.Options" />
16-
<Reference Include="System.Net.WebSockets.WebSocketProtocol" />
1716
</ItemGroup>
1817

1918
</Project>

src/Middleware/WebSockets/src/WebSocketMiddleware.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ public async Task<WebSocket> AcceptAsync(WebSocketAcceptContext acceptContext)
159159

160160
Stream opaqueTransport = await _upgradeFeature.UpgradeAsync(); // Sets status code to 101
161161

162-
return WebSocketProtocol.CreateFromStream(opaqueTransport, isServer: true, subProtocol: subProtocol, keepAliveInterval: keepAliveInterval);
162+
return WebSocket.CreateFromStream(opaqueTransport, isServer: true, subProtocol: subProtocol, keepAliveInterval: keepAliveInterval);
163163
}
164164
}
165165
}

src/Middleware/WebSockets/test/UnitTests/WebSocketPair.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ public static WebSocketPair Create()
2828
return new WebSocketPair(
2929
serverStream,
3030
clientStream,
31-
clientSocket: WebSocketProtocol.CreateFromStream(clientStream, isServer: false, subProtocol: null, keepAliveInterval: TimeSpan.FromMinutes(2)),
32-
serverSocket: WebSocketProtocol.CreateFromStream(serverStream, isServer: true, subProtocol: null, keepAliveInterval: TimeSpan.FromMinutes(2)));
31+
clientSocket: WebSocket.CreateFromStream(clientStream, isServer: false, subProtocol: null, keepAliveInterval: TimeSpan.FromMinutes(2)),
32+
serverSocket: WebSocket.CreateFromStream(serverStream, isServer: true, subProtocol: null, keepAliveInterval: TimeSpan.FromMinutes(2)));
3333
}
3434
}
3535
}

0 commit comments

Comments
 (0)