Skip to content

Commit a62b86c

Browse files
authored
Use byte array in message received to avoid some unnecessary encoding (#2748)
1 parent bdd47e2 commit a62b86c

File tree

3 files changed

+29
-21
lines changed

3 files changed

+29
-21
lines changed

lib/PuppeteerSharp/Cdp/Connection.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Collections.Concurrent;
33
using System.Collections.Generic;
44
using System.Linq;
5+
using System.Text;
56
using System.Text.Json;
67
using System.Threading;
78
using System.Threading.Tasks;
@@ -280,7 +281,11 @@ private async Task ProcessMessage(MessageReceivedEventArgs e)
280281
return;
281282
}
282283

283-
_logger.LogTrace("◀ Receive {Message}", response);
284+
if (_logger.IsEnabled(LogLevel.Trace))
285+
{
286+
_logger.LogTrace("◀ Receive {Message}", Encoding.UTF8.GetString(response));
287+
}
288+
284289
ProcessIncomingMessage(obj);
285290
}
286291
catch (Exception ex)

lib/PuppeteerSharp/Transport/MessageReceivedEventArgs.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,11 @@ public class MessageReceivedEventArgs : EventArgs
1212
/// Initializes a new instance of the <see cref="PuppeteerSharp.Transport.MessageReceivedEventArgs"/> class.
1313
/// </summary>
1414
/// <param name="message">Message.</param>
15-
public MessageReceivedEventArgs(string message) => Message = message;
15+
public MessageReceivedEventArgs(byte[] message) => Message = message;
1616

1717
/// <summary>
1818
/// Transport message.
1919
/// </summary>
20-
public string Message { get; }
20+
public byte[] Message { get; }
2121
}
2222
}

lib/PuppeteerSharp/Transport/WebSocketTransport.cs

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Diagnostics.CodeAnalysis;
3+
using System.IO;
34
using System.Net.WebSockets;
45
using System.Text;
56
using System.Threading;
@@ -138,18 +139,16 @@ private static void ScheduleTransportTask(Func<CancellationToken, Task> taskFact
138139
/// Starts listening the socket.
139140
/// </summary>
140141
/// <returns>The start.</returns>
141-
private async Task<object> GetResponseAsync(CancellationToken cancellationToken)
142+
private async Task GetResponseAsync(CancellationToken cancellationToken)
142143
{
143144
var buffer = new byte[2048];
144145

145146
while (!IsClosed)
146147
{
147-
var endOfMessage = false;
148-
var response = new StringBuilder();
149-
150-
while (!endOfMessage)
148+
MemoryStream memoryStream = null;
149+
WebSocketReceiveResult result;
150+
do
151151
{
152-
WebSocketReceiveResult result;
153152
try
154153
{
155154
result = await _client.ReceiveAsync(
@@ -158,31 +157,35 @@ private async Task<object> GetResponseAsync(CancellationToken cancellationToken)
158157
}
159158
catch (OperationCanceledException)
160159
{
161-
return null;
160+
return;
162161
}
163162
catch (Exception ex)
164163
{
165164
OnClose(ex.Message);
166-
return null;
165+
return;
167166
}
168167

169-
endOfMessage = result.EndOfMessage;
170-
171-
if (result.MessageType == WebSocketMessageType.Text)
168+
if (result.MessageType == WebSocketMessageType.Close)
172169
{
173-
response.Append(Encoding.UTF8.GetString(buffer, 0, result.Count));
170+
OnClose("WebSocket closed");
171+
return;
174172
}
175-
else if (result.MessageType == WebSocketMessageType.Close)
173+
else if (result.MessageType == WebSocketMessageType.Binary)
176174
{
177-
OnClose("WebSocket closed");
178-
return null;
175+
continue;
179176
}
177+
178+
if (memoryStream is null && !result.EndOfMessage)
179+
{
180+
memoryStream = new MemoryStream(buffer.Length);
181+
}
182+
183+
memoryStream?.Write(buffer, 0, result.Count);
180184
}
185+
while (!result.EndOfMessage);
181186

182-
MessageReceived?.Invoke(this, new MessageReceivedEventArgs(response.ToString()));
187+
MessageReceived?.Invoke(this, new MessageReceivedEventArgs(memoryStream is null ? buffer.AsSpan(0, result.Count).ToArray() : memoryStream.ToArray()));
183188
}
184-
185-
return null;
186189
}
187190

188191
private void OnClose(string closeReason)

0 commit comments

Comments
 (0)