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是什么,有什么作用和特点?

WebSocket是什么,有什么作用和特点?

websock第一次连不上window

每日灵魂一问-对WebSocket的理解?应用场景?

离子框架+科尔多瓦。 WebSocket 在 android release 版本中不工作,但 debug 版本工作正常

vue-native-websocket