RubyConf2012 大会上 @yedingding 分享的 Ruby Realtime web 中提到的几种技术方案选择,XHR polling、HTTP Long Polling、HTTPStream、Flash Socket、Web Socket,其中关于 Flash Socket 的描述我觉得可以探讨一下,正好我的工作和 Ruby、Flash 都有很多接触。
Socket 是一种简单、宽松的通信方式,HTTP 协议也是在 Socket 方式的基础上定了一些 request 和 response 的协议。Flash Socket 是在 Flash 应用程序中和服务器端建立一个 Socket 连接,至于后端是 Flash Media Server 还是开源的 Red5,或是 Ruby Socket Server,都是可以的。只要遵循 Socket 的规范,前后端的实现都是任意组合的。前端可以是 Flash,可以是 Silverlight,也可以是 Java Applet。后端的选择就更多了。
低级浏览器(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。