From a69ca6c55bb7183d247c2c3b25203dbed99fd5d9 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Thu, 6 Oct 2016 14:55:01 -0400 Subject: avoid buffering http responses --- .../ServerManager/ServerManager.cs | 7 +++++-- .../ServerManager/WebSocketConnection.cs | 9 ++++++--- 2 files changed, 11 insertions(+), 5 deletions(-) (limited to 'MediaBrowser.Server.Implementations/ServerManager') diff --git a/MediaBrowser.Server.Implementations/ServerManager/ServerManager.cs b/MediaBrowser.Server.Implementations/ServerManager/ServerManager.cs index 33d106916..893592fa3 100644 --- a/MediaBrowser.Server.Implementations/ServerManager/ServerManager.cs +++ b/MediaBrowser.Server.Implementations/ServerManager/ServerManager.cs @@ -13,6 +13,7 @@ using System.Linq; using System.Net.Sockets; using System.Threading; using System.Threading.Tasks; +using MediaBrowser.Common.IO; namespace MediaBrowser.Server.Implementations.ServerManager { @@ -72,6 +73,7 @@ namespace MediaBrowser.Server.Implementations.ServerManager private readonly List _webSocketListeners = new List(); private bool _disposed; + private readonly IMemoryStreamProvider _memoryStreamProvider; /// /// Initializes a new instance of the class. @@ -81,7 +83,7 @@ namespace MediaBrowser.Server.Implementations.ServerManager /// The logger. /// The configuration manager. /// applicationHost - public ServerManager(IServerApplicationHost applicationHost, IJsonSerializer jsonSerializer, ILogger logger, IServerConfigurationManager configurationManager) + public ServerManager(IServerApplicationHost applicationHost, IJsonSerializer jsonSerializer, ILogger logger, IServerConfigurationManager configurationManager, IMemoryStreamProvider memoryStreamProvider) { if (applicationHost == null) { @@ -100,6 +102,7 @@ namespace MediaBrowser.Server.Implementations.ServerManager _jsonSerializer = jsonSerializer; _applicationHost = applicationHost; ConfigurationManager = configurationManager; + _memoryStreamProvider = memoryStreamProvider; } /// @@ -150,7 +153,7 @@ namespace MediaBrowser.Server.Implementations.ServerManager return; } - var connection = new WebSocketConnection(e.WebSocket, e.Endpoint, _jsonSerializer, _logger) + var connection = new WebSocketConnection(e.WebSocket, e.Endpoint, _jsonSerializer, _logger, _memoryStreamProvider) { OnReceive = ProcessWebSocketMessageReceived, Url = e.Url, diff --git a/MediaBrowser.Server.Implementations/ServerManager/WebSocketConnection.cs b/MediaBrowser.Server.Implementations/ServerManager/WebSocketConnection.cs index 2adf3e86a..af0699834 100644 --- a/MediaBrowser.Server.Implementations/ServerManager/WebSocketConnection.cs +++ b/MediaBrowser.Server.Implementations/ServerManager/WebSocketConnection.cs @@ -9,6 +9,7 @@ using System.Collections.Specialized; using System.IO; using System.Threading; using System.Threading.Tasks; +using MediaBrowser.Common.IO; using UniversalDetector; namespace MediaBrowser.Server.Implementations.ServerManager @@ -78,7 +79,8 @@ namespace MediaBrowser.Server.Implementations.ServerManager /// /// The query string. public NameValueCollection QueryString { get; set; } - + private readonly IMemoryStreamProvider _memoryStreamProvider; + /// /// Initializes a new instance of the class. /// @@ -87,7 +89,7 @@ namespace MediaBrowser.Server.Implementations.ServerManager /// The json serializer. /// The logger. /// socket - public WebSocketConnection(IWebSocket socket, string remoteEndPoint, IJsonSerializer jsonSerializer, ILogger logger) + public WebSocketConnection(IWebSocket socket, string remoteEndPoint, IJsonSerializer jsonSerializer, ILogger logger, IMemoryStreamProvider memoryStreamProvider) { if (socket == null) { @@ -113,6 +115,7 @@ namespace MediaBrowser.Server.Implementations.ServerManager _socket.OnReceive = OnReceiveInternal; RemoteEndPoint = remoteEndPoint; _logger = logger; + _memoryStreamProvider = memoryStreamProvider; socket.Closed += socket_Closed; } @@ -149,7 +152,7 @@ namespace MediaBrowser.Server.Implementations.ServerManager { try { - using (var ms = new MemoryStream(bytes)) + using (var ms = _memoryStreamProvider.CreateNew(bytes)) { var detector = new CharsetDetector(); detector.Feed(ms); -- cgit v1.2.3