Websocket 通过web套接字发送压缩数据(到Flash VNC应用程序)
TL;博士: 通过web套接字向客户端发送“Deflate”压缩数据会导致难以跟踪的问题。是否可以通过web套接字发送“Deflate”压缩数据 我有一个使用Flashlight VNC的应用程序,它已经更新为使用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 +
'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):
有两种选择:
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)
}
}
}