TL; DR: 发送" Deflate"通过Web套接字将压缩数据压缩到客户端会导致难以跟踪的问题。发送" Deflate"可以通过Web套接字压缩数据吗?
我有一个使用已更新为使用网络套接字的Flashlight VNC的应用程序。为了使其更高效,我试图在数据到达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)
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
}
Web套接字发送(嵌入式Jetty 8 / Scala):
def onMessage(message:String) {
try {
val compressed = deflate(message)
serverSocket.connection.sendMessage(compressed)
} catch {
case e : Exception => {
println(e.getCause)
}
}
}
答案 0 :(得分:2)
有两个选项:
permessage-deflate
WebSocket extension的WebSocket服务器。这将透明地压缩支持permessage-deflate
(目前只有Chrome)的浏览器的WebSocket有效负载(文本和二进制)