如何通过WebSocket发送更大的消息?

本文关键字:消息 何通过 WebSocket | 更新日期: 2023-09-27 18:15:14

我正在用c#开发一个WebSocket服务器,我注意到使用send()方法从浏览器(在这种情况下是Chrome)发出的所有消息都是126个字符的最大长度。当我想要发送大于126个字符的消息时,它总是会发生,看起来协议会删除任何大于126个字符的消息,只传输前126个字符。我试图检查协议定义,但没有找到任何答案。

所以,我的问题是,我可以通过WebSockets发送更大的消息吗?

更新:这是我在c# WebSocket服务器中解析来自客户端(Chrome)的消息的方式:

    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);
            }
        }
    }

我仍然不明白我怎么能得到更大的消息,它可能是操作码的东西,但我不知道要改变什么才能使它工作?

如何通过WebSocket发送更大的消息?

WebSocket消息可以是任意大小的。然而,大的消息通常以多个部分(片段)传输,以避免线首阻塞。

我知道你可以发送大于126个字符的消息,
我能够通过包含字符串本身包含126个字符的protobuf发送数据。http://www.websocket.org/echo.html
如果你看看这个网站,你可以测试一下你的信息。(注意这里不使用片段)

你说的不正确。发送必须支持超过126个字符。这是一个正确格式化输出的问题。如果我们被限制在126个字符,就不会有用于WebRTC的信号服务器。我将编写这个发送消息函数,并在完成后将其发布在这里。