RubyConf 对 Flash Socket 的补充

qhwa · 2012年11月19日 · 最后由 tarzansos 回复于 2012年11月19日 · 5828 次阅读

RubyConf2012 大会上 @yedingding 分享的 Ruby Realtime web 中提到的几种技术方案选择,XHR polling、HTTP Long Polling、HTTPStream、Flash Socket、Web Socket,其中关于 Flash Socket 的描述我觉得可以探讨一下,正好我的工作和 Ruby、Flash 都有很多接触。

1. 误区: Flash Socket 需要 Flash Media Server 配合?

Socket 是一种简单、宽松的通信方式,HTTP 协议也是在 Socket 方式的基础上定了一些 request 和 response 的协议。Flash Socket 是在 Flash 应用程序中和服务器端建立一个 Socket 连接,至于后端是 Flash Media Server 还是开源的 Red5, 或是 Ruby Socket Server,都是可以的。只要遵循 Socket 的规范,前后端的实现都是任意组合的。前端可以是 Flash,可以是 Silverlight,也可以是 Java Applet。后端的选择就更多了。

2. 补充: Web Socket 在低级浏览器上的支持

低级浏览器(IE6、7、8)中可以利用 Flash Web Socket 做 JS Web Socket 方案的 fallback。 Flash 支持最底层的 Socket,也可以很容易实现 Web Socket、XML Socket 这些封装。我们开发过 Web 版的阿里旺旺聊天界面,客户端就是使用了 Flash Web Socket 为主, JS Web Socket 为 fallback 的方案 。然后封装了一个 Web Socket 组件,业务逻辑中不需要关心 Web Socket 是 JS 还是 Flash 实现。

虽然大家用 Flash Socket 的机会比较少,而且短期内 Flash Socket 必然被 JS web socket 或 Flash web socket 代替,个人认为以后 Flash 在桌面 web 上的机会会越来越少,但是目前 Flash 还是可以做一些 HTML5 的有益补充,所以我斗胆在 Ruby 社区抛个砖,说一下 Flash Socket 的东西,方便大家在技术选型的时候,当你的应用需要考虑低级浏览器的时候,当你的应用需要跨域 realtime 的时候,也可以考虑一下 Flash。

Flash Socket 这个话题不是整个分享的重点,现场 @yedingding 大大分享中学到好多技术和经验,在这里顺便感谢一下!~

as2 的 XMLSocket 和 as3 的 flash.net.Socket 有什么区别

其实我觉得 Flash Socket 兼容性比 websocket 好, 至少现在很多系统,比如博彩行业,基本都是 Flash Socket 实现。

#2 楼 @yakczh as2 中的 XMLSocket 在 as3 中也有: net.flash.XMLSocket net.flash.Socket 非常底层,提供了 readBytesreadUnsignedBytereadObject 等等非常底层的接口,你可以获取到底层的 Binary 数据。 net.flash.XMLSocket 用 XML 传输一些文本数据,只提供了少量的数据操作接口,但是拿到 XML 数据后可以用 XML 的接口做很多事情

@qhwa 非常感谢你的指出,我没有好好去了解 Flash Socket 的具体实现,给大家错误的信息,不好意思。我刚才看了一下,是不是如果走 Ruby Socket Server 这种,就是自定义通讯协议,也可以达到目标?对 Flash 一直比较排斥,很多方面都不了解,你们能有 Web 旺旺这么好的实践平台,多跟大家分享一下这方面的知识,:)。至于 Fallback,比如 Socket.IO 这些库都已经做的很好了,比如可以优先用 WebSocket,如果不支持的话,自动 fallback 到 long polling, flash, etc,都非常的好用。如果考虑低级浏览器或者跨域的话,long polling 也是不错的方式。

#5 楼 @yedingding 是的,自己写个 ruby 的 socket server,也可以达到目标的。 确实 long polling 大部分情况都可以作为不错的 fallback,如果不是对双向通信要求很高的应用,比如炒股软件啥的

说到 web 旺旺,我是参与开发前端的 web socket 组件,后端是用 Java 做的,只晓得我们的后端架构师非常给力,颠覆了我原先对一台服务器最大连接数的概念……

同事啊

#8 楼 @huacnlee 握爪,还请教过你一些 ruby 问题哈,Ark 啥的

早期 juggernaut 就是使用 flash Socket,flash Socket 也可以做的很轻量。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册