簡體   English   中英

Azure 應用服務 websocket 緩沖區緩沖區大小限制?

[英]Azure app service websocket buffer buffer size limits?

我遇到了一個問題,我的 websocket 連接在本地按預期運行,但在部署到 azure 應用程序服務時卻沒有。 (.NET 核心 3.0)

我能夠在本地接收任何大小的消息,但是當部署到 azure 時,消息的上限為 4088 字節。

代碼示例:

await Receive(socket, async (result, buffer) =>
{
    Console.WriteLine("Message size: " + result.Count);
    message = Encoding.UTF8.GetString(buffer, 0, result.Count);
});

private async Task Receive(WebSocket socket, Action<WebSocketReceiveResult, byte[]> handleMessage)
{
    try
    {
        var buffer = new byte[1024 * 16];
        while (socket.State == WebSocketState.Open)
        {
            WebSocketReceiveResult result = null; 
            using (var cts = new CancellationTokenSource(1200000))
            {
                result = await socket.ReceiveAsync(
                    buffer: new ArraySegment<byte>(buffer),
                    cancellationToken: cts.Token
                    );
            }
            handleMessage(result, buffer);
        }
    }
    catch (Exception ex)
    {
        Log.Error(ex, "Exception occured when receiving message async");
    }
}

應用服務中是否有任何可以更改的限制?

我已經嘗試設置一個遠程客戶端向 azure 應用程序服務和我的本地環境發送消息。 這只是 azure 應用程序服務的問題。

固定於:

private async Task Receive(WebSocket webSocket, Action<string> handleMessage)
{
    try
    {
        while (webSocket.State == WebSocketState.Open)
        {
            var compoundBuffer = new List<byte>();
            WebSocketReceiveResult messageReceiveResult = null;
            byte[] buffer = new byte[4 * 1024];

            do
            {
                using (var cts = new CancellationTokenSource(1200000))
                {
                    messageReceiveResult = await webSocket.ReceiveAsync(
                    new ArraySegment<byte>(buffer),
                    cts.Token
                    );
                }

                if (messageReceiveResult.MessageType == WebSocketMessageType.Text)
                {
                    byte[] readBytes = new byte[messageReceiveResult.Count];
                    Array.Copy(buffer, readBytes, messageReceiveResult.Count);
                    compoundBuffer.AddRange(readBytes);
                }
            } while (!messageReceiveResult.EndOfMessage);

            string message = Encoding.UTF8.GetString(compoundBuffer.ToArray());
            handleMessage(message);
        }
    }
    catch (Exception ex)
    {
        Log.Error(ex, "Exception occured when receiving message async");
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM