Websocket 通过web套接字发送压缩数据(到Flash VNC应用程序)

Websocket 通过web套接字发送压缩数据(到Flash VNC应用程序),websocket,jetty,flashlight,Websocket,Jetty,Flashlight,TL;博士: 通过web套接字向客户端发送“Deflate”压缩数据会导致难以跟踪的问题。是否可以通过web套接字发送“Deflate”压缩数据 我有一个使用Flashlight VNC的应用程序,它已经更新为使用web套接字。为了提高性能,我尝试在数据到达Flash应用程序之前对其进行压缩。VNC客户端在握手后(压缩开始时)立即爆炸 握手: 'Upgrade: WebSocket\r\n' + 'Connection: Upgrade\r\n' + 'Host: ' + hostport +

TL;博士: 通过web套接字向客户端发送“Deflate”压缩数据会导致难以跟踪的问题。是否可以通过web套接字发送“Deflate”压缩数据

我有一个使用Flashlight VNC的应用程序,它已经更新为使用web套接字。为了提高性能,我尝试在数据到达Flash应用程序之前对其进行压缩。VNC客户端在握手后(压缩开始时)立即爆炸

握手:

'Upgrade: WebSocket\r\n' +
'Connection: Upgrade\r\n' +
'Host: ' + hostport + '\r\n' +
'Origin: ' + url.slice(0, url.indexOf("/", 10)+1) + '\r\n' +
'Sec-WebSocket-Protocol: ' + 'base64' + '\r\n' +
'Sec-WebSocket-Key1: ' + key1 + '\r\n' +
'Sec-WebSocket-Key2: ' + key2 + '\r\n\r\n';
压缩代码(Scala)

web套接字发送(嵌入式Jetty 8/Scala):

有两种选择:

  • 发送二进制WebSocket消息(WebSocket文本消息必须包含UTF8编码的有效负载)
  • 部署实现的WebSocket服务器。对于支持
    permessagedeflate
    (当前仅限Chrome)的浏览器,这将透明地压缩WebSocket负载(文本和二进制)
  • def deflate3(str:String):String = {
        val data = str.getBytes
        val deflater = new Deflater
        deflater.setInput(data)
    
        val outputStream = new ByteArrayOutputStream(data.length)
        deflater.finish
        val buffer = new Array[Byte](1024)
        while(!deflater.finished) {
          val count = deflater.deflate(buffer)
          outputStream.write(buffer, 0, count)
        }
        outputStream.close
        outputStream.toString
      }
    
    def onMessage(message:String) {
          try {
            val compressed = deflate(message)
            serverSocket.connection.sendMessage(compressed)
          } catch {
            case e : Exception => {
              println(e.getCause)
            }
          }
        }