Как я могу отправлять большие сообщения через WebSocket? - PullRequest
7 голосов
/ 19 ноября 2011

Я разрабатываю сервер WebSocket на C # и заметил, что все сообщения, поступающие из браузера (в данном случае Chrome) с использованием метода send (), имеют длину не более 126 символов. Это происходит все время, когда я хочу отправлять сообщения размером более 126 символов, похоже, что протокол обрезает любое сообщение размером более 126 символов и передает только первые 126 символов. Я попытался проверить определение протокола, но не нашел ответа.

Итак, мой вопрос, могу ли я отправлять большие сообщения через WebSockets?

UPDATE: Это способ анализа сообщений от клиента (Chrome) на моем сервере C # WebSocket:

    private void ReceiveCallback(IAsyncResult _result)
    {
        lock (lckRead)
        {
            string message = string.Empty;
            int startIndex = 2;
            Int64 dataLength = (byte)(buffer[1] & 0x7F); // when the message is larger then 126 chars it cuts here and all i get is the first 126 chars
            if (dataLength > 0)
            {
                if (dataLength == 126)
                {
                    BitConverter.ToInt16(buffer, startIndex);
                    startIndex = 4;
                }
                else if (dataLength == 127)
                {
                    BitConverter.ToInt64(buffer, startIndex);
                    startIndex = 10;
                }

                bool masked = Convert.ToBoolean((buffer[1] & 0x80) >> 7);
                int maskKey = 0;
                if (masked)
                {
                    maskKey = BitConverter.ToInt32(buffer, startIndex);
                    startIndex = startIndex + 4;
                }

                byte[] payload = new byte[dataLength];
                Array.Copy(buffer, (int)startIndex, payload, 0, (int)dataLength);
                if (masked)
                {
                    payload = MaskBytes(payload, maskKey);
                    message = Encoding.UTF8.GetString(payload);
                    OnDataReceived(new DataReceivedEventArgs(message.Length, message));
                }

                HandleMessage(message); //'message' -  the message that received

                Listen();
            }
            else
            {
                if (ClientDisconnected != null)
                    ClientDisconnected(this, EventArgs.Empty);
            }
        }
    }

Я до сих пор не понял, как я могу получить более крупное сообщение, возможно, что-то с кодом операции, но я не знаю, что изменить, чтобы оно работало?

Ответы [ 3 ]

7 голосов
/ 19 ноября 2011

Сообщения WebSocket могут быть любого размера.Однако большие сообщения обычно передаются в нескольких частях (фрагментах), чтобы избежать блокировки заголовка строки.Подробнее см. идентификатор WebSockets .

2 голосов
/ 17 декабря 2013

Я точно знаю, что вы можете отправлять сообщения длиной более 126 символов,
Я могу отправлять данные через protobuf, который содержит строки, которые сами по себе содержат 126 символов.http://www.websocket.org/echo.html
Если вы посмотрите на этот сайт, вы можете проверить свои сообщения.(Обратите внимание, что это не использует фрагменты)

0 голосов
/ 16 декабря 2013

Это не правильно, что вы сказали DTB.Отправка должна определенно поддерживать более 126 символов.Это вопрос правильного форматирования вашего вывода.Если бы мы были ограничены 126 символами, не было бы серверов сигнализации для WebRTC.Я закодирую эту функцию отправки сообщения и опубликую ее здесь, когда закончу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...