websocket 二进制框架示例
Posted
技术标签:
【中文标题】websocket 二进制框架示例【英文标题】:websocket binary frame example 【发布时间】:2011-10-19 05:33:58 【问题描述】:在 Internet 上,我找不到任何使用 javascript(作为 Web 客户端)和 Java(作为 Web 服务器)进行“websocket 二进制帧”通信的示例。
你能发布几个“websocket 二进制帧”通信的例子吗?
【问题讨论】:
我曾经发布过一些关于二进制框架的伪代码:***.com/questions/7040078/…. 【参考方案1】:Kaazing WebSocket Gateway 提供二进制支持已经有一段时间了。此外,它也适用于原生不支持 WebSocket 的旧版浏览器。并且支持 JavaScript 以外的客户端。因此,您可以使用 JavaScript、Flash/Flex、Silverlight、.Net 或 Java 在 WebSocket 上进行二进制处理。您可以使用任何浏览器,回退模拟将在旧版浏览器中工作。
后端服务器可以是 Java 或任何侦听 TCP 端口的服务器。
【讨论】:
【参考方案2】:Jetty 至少从 7.5.2 版本开始支持 WebSockets 中的二进制帧。这是一个包含二进制帧的 Jetty 示例:https://www.eclipse.org/jetty/documentation/9.4.x/jetty-websocket-api-send-message.html
从服务器的角度来看,发送和接收二进制数据的区别很小,只是一个操作码的变化。发送文本时,您只能使用 UTF-8 编码的数据。使用二进制就没有这个限制。
从浏览器的角度来看,如果浏览器支持二进制数据(实际上只有最新版本的 Chrome 支持),那么发送二进制数据涉及使用 WebSocket 对象上的send()
方法发送一个数组缓冲区或 blob。如果服务器发送二进制帧,则会自动接收二进制数据。但是,您可以通过在 WebSocket 对象实例上设置 binaryType
属性来选择接收 blob 或数组缓冲区。
【讨论】:
@stackerflow Autobahn 显然没有为第三方服务器生成报告。我已经用二进制帧替换了 Jetty 示例的链接。【参考方案3】:我只知道如何解开浏览器发送的内容,这是我的代码:
socket.ondata = function(src,start,end)
src = src.slice(start,end);
var maskKeys = [src[2],src[3],src[4],src[5]];
var dest = new Array();
for(var i=0;i<src.length-6;i++)
var mKey = maskKeys[i%4];
dest[i] = mKey ^ src[6+i];
console.log(new Buffer(dest).toString());
从这里找到:http://songpengfei.iteye.com/blog/1178310
链接有一个压缩的c源代码,我把它改成node.js。现在我正在研究如何向客户端发送数据。
【讨论】:
以上是关于websocket 二进制框架示例的主要内容,如果未能解决你的问题,请参考以下文章
离子框架+科尔多瓦。 WebSocket 在 android release 版本中不工作,但 debug 版本工作正常