[英]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.