2

我正在使用 socket.io 在 Internet Explorer 9 中通过 SSL 启动跨域闪存套接字连接。当我启动连接时,一切似乎都正常,直到我发送客户端的整个 HTML 网页。如果我从不发送此 HTML,则连接仍然存在,并且该连接适用于发送较少量的数据。当我发送整个 HTML 页面时,socket.io 日志显示它正在缩短发送的 HTML,然后是info - transport end (undefined). 我将此错误追溯到

if (i === 0){
  if (chr != '\u0000')
    this.error('Bad framing. Expected null byte as first frame');
  else
    continue;
}

default.js服务器端的 socket.io 文件中。客户端似乎出于某种原因分解了这些数据,这导致了格式错误的数据包。它不可能是 TCP 错误,因为发送此数量的数据可以使用常规 websockets 和 JSONP。

我完全不知道如何调试它。似乎它可能是一些极端情况 Flash + SSL 错误。任何帮助将不胜感激。

4

1 回答 1

2

TL;DR:尝试使用https://github.com/NextThought/web-socket-js中的文件更新本地 socket.io 客户端中的 SWF 文件和 web_socket.js

长答案:

socket.io 的分布式客户端版本(至少 0.9.10 版本)似乎存在一个错误:它分发的 Flash SWF 支持文件的版本(最初来自与上述 repo 相同的 github repo)由于 SSL 实现中的错误,无法通过 SSL 发送大小大于 16K - 8 个字节的 WebSocket 帧(16K 是 SSL 帧大小,8 个字节是 WebSocket 标头大小)。这是在 SSL 代码的原始版本(位于http://code.google.com/p/as3crypto/issues/detail?id=14)中发现的一个问题,尽管该修复尚未在此处或其中任何一个中合并在撰写本文时的 github 存储库。

最初的 github 存储库现在已经开始实施最终的 WebSocket 规范,而与 socket.io 一起分发的版本使用的是更旧的草案规范(这使得诊断这个问题变得更加困难,因为旧的规范不包含尽可能多的框架信息) .

开头引用的 github 存储库包含更新的 SWF 文件,其中包含最新的 github 更改和 SSL 错误修复。它很容易集成到本地 socket.io 客户端构建中,对我们来说,它解决了问题(在 IE9 中使用 Flash Player 11 进行测试)。只有当您连接的 WebSocket 服务器支持最终的 WebSocket 规范时,它才会起作用。在与 socket.io 一起分发的 fork 的 JavaScript 部分中有一些 socket.io 特定的补丁,以使其在 node.js 中运行(我认为);这个 repo 不包括那些补丁,所以它可能只能在 web 浏览器中工作。

于 2012-11-01T15:26:56.737 回答