我们目前的项目服务器端使用了Ice来构建。Ice有一套自己的网络协议,客户端和服务器端可以基于此协议来交互。由于Ice使用Slice这种中间语言来描述服务器和客户端的交互接口,所以它可以做到极大限度地屏蔽网络协议这个细节。也就是说,我们只要借助Ice和Slice,我们可以轻松地编写网络程序。
然后,我们的后端现在需要一个运行在Web浏览器上的客户端。要与Ice做交互,如果使用TCP协议的话,得保证是长连接的。但HTTP是短连接的。而另一方面,我们还需要选择一个Ice支持的和Web相关的语言来做这件事情。如果要在浏览器端直接与Ice服务建立连接,可供选择的语言/平台包括:
- Flash
- Silverlight
因为我之前用erlang简单写了个Ice的客户端库,所以我对Ice底层协议有一定了解,可以不一定使用Ice支持的语言,所以HTML5其实也是个选择。此外,如果在浏览器端使用Applet,Java可能也是个选择。
其实几个月前在这块的技术选择问题上我就做过简单的研究,当时确定的方案是使用Flash。但是,后来人员招聘上遇到了问题,看起来要招一个会ActionScript和前端页面技术的程序员来做我们这种项目,似乎大材小用,成本显高了。
那么,考虑到团队里有现成的Java程序员,而且看起来招一个会用Java写网站的程序员简单又便宜,似乎是排除技术原因的最好选择。但是,如果不在浏览器端直接连接服务器来做交互,而是让Web服务器端来做中转的话,会面临不少问题:
- 浏览器端操作结果的获取问题,说白了就是非实时了,得用Ajax等等技术去模拟实时,代价就是不断轮训,也就是通常说的poll
- Web服务器端需要编写大量代码:对用户操作的映射,结果缓存等等
如果能用Flash包装与服务器交互的部分,而把UI相关的东西留给HTML/JS/CSS去做,那是不是可行一点?如果只是用ActionScript编写与服务器端的交互逻辑代码,我就不需要花时间去系统学习ActionScript,甚至如何用Flash做界面,我甚至不用搞懂这些技术之间的关系。基本上看些Ice for ActionScript的例子代码,就可以完成这件事情。
以下记录一些主要的过程/方法: