当前位置: 代码迷 >> C# >> 在进行websocket开发的时候压缩无法实现有关问题
  详细解决方案

在进行websocket开发的时候压缩无法实现有关问题

热度:82   发布时间:2016-05-05 04:30:33.0
在进行websocket开发的时候压缩无法实现问题
websocket的通信握手没有问题,但是发送数据的时候需要有一个压缩,我试着将代码写成  如下压缩:

        /// <summary>
        /// 往关联的客户端发送数据
        /// </summary>
        public void Send(string message, Socket Client)
        {
            DataFrame dr = new DataFrame(message);
            var buffer = dr.GetBytes();
            NetworkStream stream = new NetworkStream(Client);
            buffer = Compress(stream, buffer);
            _workSocket.Send(buffer); 
        }

        /// <summary>
        /// 压缩
        /// </summary>
        /// <param name="value"></param>
        /// <returns></returns>
        public byte[] Compress(NetworkStream input, byte[] nbyte)
        {
            using (var compressor = new DeflateStream(input, CompressionMode.Compress,true))
            {
                int offset = 0;
                int count = nbyte.Length;
                compressor.Write(nbyte, offset, count);
                compressor.Close();
                return nbyte;
            }
        }

谷歌浏览器 报错WebSocket connection to 'ws://192.168.1.179:8050/' failed: A server must not mask any frames that it sends to the client.
------解决思路----------------------
所以你需要压缩的其实是message,而不是DataFrame 
------解决思路----------------------
你可以先把字符串转换成字节数组,然后压缩,然后按Base64编码成字符串,放到DataFrame里,发送
接收到之后,再按Base64转成byte数组,然后解压,然后转回字符串
------解决思路----------------------
websocket基本的协议,应该是不支持压缩的。
------解决思路----------------------

你只能压缩你自己的数据包部份。其他的不能压