#c# #.net #websocket #size #message
Вопрос:
Я хотел бы знать: Каков максимальный размер текстового сообщения WebSocketSharp? Если строка сообщения превышает максимальный размер, будет ли она разделена на небольшие фрагменты данных и отправлена на сервер через websocket?
Ответ №1:
Глядя на исходный код, кажется, что максимального размера нет. Существует внутреннее поле FragmentLength
со следующим комментарием
/// <summary>
/// Represents the length used to determine whether the data should be fragmented in sending.
/// </summary>
/// <remarks>
/// <para>
/// The data will be fragmented if that length is greater than the value of this field.
/// </para>
/// <para>
/// If you would like to change the value, you must set it to a value between <c>125</c> and
/// <c>Int32.MaxValue - 14</c> inclusive.
/// </para>
/// </remarks>
Комментарии:
1. Поэтому, когда мы реализуем receiveasync , мы можем создать буфер любого размера, и сообщение, отправленное клиентом через websocket, будет разделено на куски в соответствии с размером буфера, верно?
2. Я точно не помню, но я думаю, что упомянутое поле инициализировано до 1016, что соответствует размеру фрагментов. Просто проверьте источник, выполнив поиск по имени поля ja.
3. Большое вам спасибо! Не уверен, что вы когда-нибудь использовали библиотеку WebSocket docs.microsoft.com/en-us/dotnet/api/… , Я нахожу, что у websocket-sharp есть некоторые ненадежные проблемы, и они не обновлялись в течение некоторого времени. Поэтому я подумываю о том, чтобы снова реализовать клиент и сервер websocket отдельно с помощью библиотеки websocket. Итак, каков размер фрагмента данных? Я вижу, что ReceiveAsync разделит данные на куски в зависимости от размера буфера, который мы настроили, я прав?
Ответ №2:
Я думаю, что неправильно говорить, что WebSocket имеет некоторую максимальную длину сообщений. Есть некоторый буфер, и если ваше сообщение будет больше, чем оно, вы получите свое сообщение по частям. Но только последняя часть будет иметь EndOfMessage=true.
Комментарии:
1. Спасибо, на самом деле я задаю вопрос о sdk: websocket-sharp, nuget.org/packages/WebSocketSharp/1.0.3-rc11 Относительно того, что вы упомянули, я предполагаю, что куски/фрагменты сообщения не соответствуют десериализации объекта json.
2. Я не знаю, как именно работает этот пакет, но я думаю, что десериализация объекта внутри него будет выполнена, когда будут получены все фрагменты.
Ответ №3:
Я думаю, что правильный способ-задать этот вопрос непосредственно на github https://github.com/sta/websocket-sharp
Комментарии:
1. Хорошо, я просто нахожу, что этот документ очень тихий.
2. действительно, вы правы, но обсуждение должно вестись в проблемной области проекта, фактически также здесь 😉 редактировать: проблема, похоже, не так хороша.